当前位置: 代码迷 >> J2SE >> 关于java中iterator的一些疑义
  详细解决方案

关于java中iterator的一些疑义

热度:50   发布时间:2016-04-23 20:05:44.0
关于java中iterator的一些疑问
最近看java的书籍,看到iterator的时候,遇到一点疑问,源码也没找到,所以在这里问问大神们,书上说iterator遍历的时候,对集合变量进行修改是无效的(remove除外),理由是iterator遍历时,遍历变量得到的不是集合变量的本身,而是集合变量的值。我实验了一下,也确实在iterator遍历的时候赋值无效,但是后面又看到一种情况……就是集合以类作为他的元素时,例如A类,A有count属性,我用iterator进行遍历,得到第一个遍历变量,A a=(A)it.next();然后对a.count进行赋值,这样一来,最终打印出来的效果发现a的count居然改过来了,这不是和上面的结论相悖么?希望大神解惑
------解决思路----------------------
这个应该这样理解吧

C作为一个集合,里面放了很多B类的对象

你不能修改B,也就是把B改成其他对象

但集合里放的是B的引用,你可以通过B的引用修改B的内容,比如将B的变量值修改

这个画个图好理解一点

A--> B

B--> C

你不能改变 A --> B 的引用关系

但可以改变 B --> C 的引用关系

Java并发里有一个对象状态的概念,这个说开了还真不是一句两句说的清。。。。
------解决思路----------------------
这个很好理解,就跟函数传参差不多。iterator.next()是集合元素的副本,所以对于基本类型来说赋值改变的是它的副本,而对于引用类型来说,副本里存放的依然是对象的地址,可以通过副本找到对象的内存地址,所以可以改变对象的值。
  相关解决方案