我如何在java中创建对象的副本,而不是指针

时间:2011-03-25 17:13:29

标签: java pointers object

让我说我有一个我创造的对象。我在其中编辑了一些值,因此它与我引用的新对象()不同。让我们调用该对象f1。现在我想要另一个名为f2的对象是f1的副本而不是指针,所以当我改变f2中的值时,它也不会改变f1。我将如何在java中执行此操作?

6 个答案:

答案 0 :(得分:15)

首先,让您的类实现Cloneable接口。如果没有这个,在对象上调用clone()将抛出异常。

接下来,覆盖Object.clone(),以便它返回您特定类型的对象。实施可以简单地是:

@Override
public MyObject clone() {
    return (MyObject)super.clone();
}

除非你需要更复杂的东西。但请务必致电super.clone()

这将在层次结构中一直调用Object.clone(),它将对象中的每个数据复制到它构造的新数据。引用是复制的,而不是克隆的,因此如果您需要深层复制(对象引用的对象的克隆),您需要在被覆盖的clone()函数中执行一些额外的工作。

答案 1 :(得分:6)

大多数对象都有一个方法clone(),它会返回该对象的副本,所以在你的情况下

f2 = f1.clone()

答案 2 :(得分:2)

您使用clone

答案 3 :(得分:2)

使用类似

的内容
f2 = f1.clone();

如果您有自定义属性(或成员),则应覆盖类中的clone以进行深层复制。您可以在这里了解浅层和深层复制

http://javapapers.com/core-java/java-clone-shallow-copy-and-deep-copy/

答案 4 :(得分:0)

据说使用内置的 clone 方法存在一些问题。因此,最好实现另一种克隆技术。

有一个Java库,它支持浅克隆和深克隆。它提供了深度克隆,而无需实现Serializable。

Here

答案 5 :(得分:-3)

你可以克隆,或者如果你不能克隆,你可以为它编写自己的函数。

function (variable){
   clone = JSON.parse(JSON.stringify(variable))
   return clone;
}