1

我希望我现在只是感到困惑,因为我的 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改变?

4

2 回答 2

4

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

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

它会打印

oldValue
newValue

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

如果改变,last现在每次都会curr改变吗?

简短的回答:是的。


根据您的评论,您似乎想要克隆由curr. 如果是这样,我建议您遵循此处所述的一种方法:Java:深度克隆/复制实例的推荐解决方案

于 2013-07-09T15:31:06.443 回答
1

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

于 2013-07-09T15:30:27.697 回答