我有一个对象A。我将A中的值分配给对象B。然后更改了对象A,但我想保留对象B中的原始值。
ObjectA a = getObjectAValues();
ObjectB b = new ObjectB();
b.setval(a.getValA());
//object A updated here
return b;
当我检查第二个对象时,它具有更新的值,而不是我第一次分配它时的原始值。有什么想法可以解决这个问题吗?
答案 0 :(得分:4)
Java是pass-by-value,这意味着如果将ObjectA
的实例传递到对象中,然后又更改了该对象的某些状态,则无论它在哪里传递,它都会得到反映,主要是因为引用的值就是它在内存中的位置。
您如何解决?将值复制到您的对象中,这样就不会冒更改它的风险。通过在分配值时new
设置ObjectA
的实例可以快速完成此操作。
public void setval(ObjectA val) {
this.val = new ObjectA(val.getField1(), val.getField2());
}
答案 1 :(得分:0)
如果您从a.getValA()
获得的值是一个对象,则它通过引用而不是通过值传递。这意味着它不是原始对象的副本,而是相同的对象。当您在A中修改它时,您也在B中对其进行修改,因为它只是对同一对象的两个引用。
如果您共享有关该对象如何构建的更多细节,我可以对其进行更具体的编辑。