了解对象变量赋值行为

时间:2013-11-27 18:09:16

标签: java

我在Java中遇到了一些奇怪的问题。我在调试时已经确定了整个问题。它发生在这两行:

q=p;
q.addPair(2,3);

注意:p,q是我定义的新类。在此课程中,它有一个public function addPari(int, int)

以下是我的预期:将p复制到q,然后更改q使用q.addPair(),但保留p与之前相同。

我认为这可行,但不知怎的,事实证明q.addPair(2,3)会改变pq。任何人都可以帮助我吗?

3 个答案:

答案 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个变量指向同一个对象。