Java对象值被更改

时间:2018-12-13 17:32:43

标签: java

我有一个对象A。我将A中的值分配给对象B。然后更改了对象A,但我想保留对象B中的原始值。

ObjectA a = getObjectAValues();

ObjectB b = new ObjectB();

b.setval(a.getValA());

//object A updated here

return b;

当我检查第二个对象时,它具有更新的值,而不是我第一次分配它时的原始值。有什么想法可以解决这个问题吗?

2 个答案:

答案 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中对其进行修改,因为它只是对同一对象的两个引用。

如果您共享有关该对象如何构建的更多细节,我可以对其进行更具体的编辑。