Java 通过复制构造函数复制对象是否获得与原始对象相同的实例变量?

Java 通过复制构造函数复制对象是否获得与原始对象相同的实例变量?,java,object,copy-constructor,Java,Object,Copy Constructor,具有对象实例变量的对象副本是否与原始对象获得相同的实例变量?如果是这样,我想知道原始和复制对象是否引用了相同的实例变量。< P>与C++不同,java不自动提供复制构造函数。因此,对于有关复制构造函数行为的任何问题都没有一般的答案,因为Java对它们的行为没有任何限制 尽管如此,每个对象,无论如何初始化,都有自己的实例变量。这些不与任何其他对象共享;只有在持有相同价值的意义上,它们才能与另一个对象的“相同”。基本类型的变量(如int)彼此完全独立。但是,引用类型的任何两个变量都可以包含引用同一对

具有对象实例变量的对象副本是否与原始对象获得相同的实例变量?如果是这样,我想知道原始和复制对象是否引用了相同的实例变量。

< P>与C++不同,java不自动提供复制构造函数。因此,对于有关复制构造函数行为的任何问题都没有一般的答案,因为Java对它们的行为没有任何限制


尽管如此,每个对象,无论如何初始化,都有自己的实例变量。这些不与任何其他对象共享;只有在持有相同价值的意义上,它们才能与另一个对象的“相同”。基本类型的变量(如
int
)彼此完全独立。但是,引用类型的任何两个变量都可以包含引用同一对象的值,前提是它们声明的类型都与该对象的类兼容。复制构造函数可以很容易地创建这样的效果,但不需要这样做。

如果它们是
int
s(或任何其他原语),则不需要。如果它们是引用类型,则取决于复制构造函数的实现。复制构造函数是人类编写的代码。因此,答案取决于构造函数主体中的代码。如果您展示一些示例代码,我们可以提供一个清晰的答案。是的,正如@AndyTurner提到的,您可能需要阅读有关克隆类型的内容,即深度和浅层cloning@Coder,您的意思是编辑您的问题以包含该代码吗?请注意“克隆”一词,Java世界中的许多人认为这意味着使用
Object#clone
方法。该方法是创建对象副本的一种方法,但有技巧和陷阱,包括@YohannesGebremariam提到的深/浅复制问题。不基于
clone
的复制构造函数和复制方法也必须处理深拷贝和浅拷贝,但可以避免
clone
的一些复杂性。