创建我的对象的副本

Creating copies of my objects

我是初学者,想知道以下问题

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

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

然后我想创建另一个对象 foo second 并使其具有与 first 相同的内容(但内存位置不同)。我可以执行以下操作来实现吗?

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

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

我读到了有关对象克隆的内容,它似乎太复杂了。我觉得自从我经历了在 foo second = new foo(); 中定义一个新的 foo 的麻烦之后,编译器应该意识到 second = first; 打算复制整个东西,而不仅仅是指向第一个。是这样吗?

所以我的问题是:为什么这不是它的工作原理?上面这样设置编译器的逻辑有什么缺陷?

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

当您看到有关 clone() 的讨论时,请注意这是非常有争议和令人沮丧的(Google 如果您想知道为什么)。值得注意的例外是:arrays!

拷贝构造函数是这样工作的:

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

Foo second = new Foo(first);

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