我在Java中遇到了一些奇怪的问题。我在调试时已经确定了整个问题。它发生在这两行:
q=p;
q.addPair(2,3);
注意:p,q是我定义的新类。在此课程中,它有一个public function addPari(int, int)
。
以下是我的预期:将p
复制到q
,然后更改q
使用q.addPair()
,但保留p
与之前相同。
我认为这可行,但不知怎的,事实证明q.addPair(2,3)
会改变p
和q
。任何人都可以帮助我吗?
答案 0 :(得分:5)
q=p;
实际上并没有复制。这意味着修改q
也会修改p
,因为它们是同一个实例。
如果您希望q
成为新对象,则需要使用new
:
q = new MyObject(p);
换句话说,您正在使用copy constructor创建p
的新副本。如果您的类没有复制构造函数,则需要创建一个:它需要能够从现有对象创建新对象。它可以通过复制给定实例p
中的适当值来完成此操作。
答案 1 :(得分:0)
Java通过引用进行分配,因此您需要执行深层复制,以便将一个对象复制到相同类型的变量中,但之后会有两个单独的对象。
看看这个:http://www.jusfortechies.com/java/core-java/deepcopy_and_shallowcopy.php
答案 2 :(得分:0)
使用q=p;
,您不会将p'复制'到q,而是为q创建一个指向p实例的引用。现在,2个变量指向同一个对象。