迭代器会给我一份深刻的副本吗?

时间:2013-07-09 15:28:09

标签: java iterator copy deep-copy

我希望我现在感到困惑,因为我的Java程序表现得很奇怪。

我有以下代码:

Iterator<Entry<DateTime, Double>> itCur = this.curIntervalValues.entrySet().iterator();

Entry<DateTime, Double> last = null;
while (itCur.hasNext()){
  Entry<DateTime, Double> curr =  itCur.next();
  //more code between
  last = curr;
}

我的问题很简单:last = curr;是否制作了curr的深层副本? 或者last现在每次更改curr会发生变化吗?

2 个答案:

答案 0 :(得分:4)

执行last = curr时,last不会是当前项目的副本,而是当前项目引用。因此,如果您编辑其字段,您还将编辑curr对象引用的字段。例如,如果您执行

System.out.println(last.getSomeProperty());
last.setSomeProperty(newValue);
System.out.println(last.getSomeProperty());

会打印

oldValue
newValue

您的参考资料也会在您的收藏中进行修改。

  如果last发生变化,

每次更改都会curr吗?

简答:是的。


根据您的评论,您似乎希望克隆curr处理的数据。如果是这样,我建议遵循此处所述的一种方法:Java: recommended solution for deep cloning/copying an instance

答案 1 :(得分:1)

Entry<DateTime, Double>是一个对象,因此它通过引用存储,这意味着只有对象在内存中的位置存储在变量中。是的,如果你做last = currlast如果你改变curr就会改变。