关于java中iterator的一些疑问

lg10320 2014-11-17 11:12:55
最近看java的书籍,看到iterator的时候,遇到一点疑问,源码也没找到,所以在这里问问大神们,书上说iterator遍历的时候,对集合变量进行修改是无效的(remove除外),理由是iterator遍历时,遍历变量得到的不是集合变量的本身,而是集合变量的值。我实验了一下,也确实在iterator遍历的时候赋值无效,但是后面又看到一种情况……就是集合以类作为他的元素时,例如A类,A有count属性,我用iterator进行遍历,得到第一个遍历变量,A a=(A)it.next();然后对a.count进行赋值,这样一来,最终打印出来的效果发现a的count居然改过来了,这不是和上面的结论相悖么?希望大神解惑
...全文
211 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
baimafeima123 2016-09-01
  • 打赏
  • 举报
回复
你好,我想请问您之前做的那个影像金字塔分割那个最后理解到什么程度了?现在也在看这一块,希望和你交流下,就是用gdal库生成后的金字塔文件存在了什么地方呀?
俺是小王子 2014-11-18
  • 打赏
  • 举报
回复
这个应该这样理解吧 C作为一个集合,里面放了很多B类的对象 你不能修改B,也就是把B改成其他对象 但集合里放的是B的引用,你可以通过B的引用修改B的内容,比如将B的变量值修改 这个画个图好理解一点 A--> B B--> C 你不能改变 A --> B 的引用关系 但可以改变 B --> C 的引用关系 Java并发里有一个对象状态的概念,这个说开了还真不是一句两句说的清。。。。
wyc_ 2014-11-18
  • 打赏
  • 举报
回复
这个很好理解,就跟函数传参差不多。iterator.next()是集合元素的副本,所以对于基本类型来说赋值改变的是它的副本,而对于引用类型来说,副本里存放的依然是对象的地址,可以通过副本找到对象的内存地址,所以可以改变对象的值。
lg10320 2014-11-18
  • 打赏
  • 举报
回复
恩,有道理,应该就是这样,想了半天,多谢这位道友

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧