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

Eph*_*aim 6 java pointers object

可以说我有一个我创建的对象.我在其中编辑了一些值,因此它与我引用的新对象()不同.让我们调用该对象f1.现在我想叫F2另一个目的是F1而不是一个指针的副本,所以,当我改变F2的值,它不会也随之变化F1.我将如何在java中执行此操作?

Jon*_*han 17

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

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

@Override
public MyObject clone() {
    return (MyObject)super.clone();
}
Run Code Online (Sandbox Code Playgroud)

除非你需要更复杂的东西.不过请确保你打电话super.clone().

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


sol*_*oth 6

大多数对象都有一个方法clone(),它将返回该对象的副本,因此在您的情况下

f2 = f1.clone()
Run Code Online (Sandbox Code Playgroud)