我希望我现在感到困惑,因为我的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
会发生变化吗?
答案 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 = curr
,last
如果你改变curr
就会改变。