在Java中使用'='与clone()

时间:2014-09-11 01:36:34

标签: java reference clone shallow-copy

我正在处理一些代码并试图弄清楚如何将对象引用复制到另一个对象。我一直看到使用的clone()方法,但我已经读过它的缺陷,我想要复制的类已经实现了可序列化。所以我有一个问题是使用' ='和克隆方法 - 我的理解是这两个都是浅层副本,所以它们应该一样,但如果这是真的,那么有一个方法的好处是什么?

我正在处理的代码有2个对象数组 - 两个对象类型相同,两个数组中的所有对象最初都为null,我将数组B的值分配给相等的数组A. 随着代码的进行,数组A中的对象被初始化,并且值被分配给数组A中的对象的变量。 但是在代码的末尾,数组B中的所有对象仍为空。

我这里的概念错了吗? 如果这个概念没有错,我认为它只是我在代码中忽略的东西。

感谢任何帮助。

2 个答案:

答案 0 :(得分:3)

我会将我的评论作为答案:

你的问题是将苹果与橙子进行比较,它们是如此完全不同,以至于无法对它们进行比较。 =分配了一个引用,即它。克隆会创建一个完全新对象,其状态应与克隆对象相同,但它又是一个完全不同的对象/引用。另外,有深层和浅层克隆,因此浅层复制克隆的复合区域可能相同,但这是另一个问题的主题。

答案 1 :(得分:1)

使用=时,复制对象的引用(在内存中)。使用.clone()时,您将创建一个新对象。