我在 Java 中遇到了一些奇怪的问题。我在调试时已经解决了整个问题。它发生在这两行:
q=p;
q.addPair(2,3);
注释:p,q 是我定义的一个新类。在这个类中,它有一个 public function addPari(int, int)
.
这是我所期望的:copy p
至q
,然后更改 q
使用q.addPair()
,但离开p
和以前一样。
我认为这可行,但不知何故,事实证明 q.addPair(2,3)
将同时更改 p
和q
。有人可以帮我解决这个问题吗?
最佳答案
q=p;
实际上并不复制。这意味着修改 q
也会修改 p
,因为它们是同一个实例。
如果你想让q
成为一个新对象,你需要使用new
:
q = new MyObject(p);
换句话说,您正在使用 copy constructor创建 p
的新副本。如果您的类没有复制构造函数,您需要创建一个:它需要能够从现有对象创建一个新对象。它可以通过从给定实例 p
复制适当的值来完成此操作。
关于java - 了解对象变量赋值行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20249945/