创建我的对象的副本

时间:2017-02-08 13:32:27

标签: java deep-copy cloning

我是初学者,我对以下内容感到疑惑。

假设我有一个类foo并创建了一个对象foo first并将一些数据放入其中:

foo first = new foo();
first.data="mydata";

然后我想创建另一个对象foo second并使其具有与first相同的内容(但不是相同的内存位置)。我能做到以下几点来实现这一目标吗?

foo second = new foo();
second = first;

或者这只是将firstsecond设置为相同的内存地址,我只是在内存中的单个对象上有效获取两个句柄?

我读过关于克隆对象的内容,看起来太复杂了。我觉得自从我经历了在foo中定义新foo second = new foo();的麻烦后,编译器应该意识到second = first;打算复制整个事物而不仅仅指向第一个。{1}}。那是怎么回事?

所以我的问题是:为什么这不起作用?上面编译器设置的逻辑有什么缺陷?

1 个答案:

答案 0 :(得分:3)

最好的方法是使用复制构造函数

当您看到有关此clone()的说法时,请注意它非常有争议并且气馁(如果您想知道原因,则为Google)。值得注意的例外是:数组!

复制构造函数的工作方式如下:

Foo first = new Foo();
first.data="mydata";

Foo second = new Foo(first);

在Foo的另一个Foo的构造函数中,如果它们是复杂的对象,只需使用它们的复制结构复制字段。