我是初学者,我对以下内容感到疑惑。
假设我有一个类foo
并创建了一个对象foo first
并将一些数据放入其中:
foo first = new foo();
first.data="mydata";
然后我想创建另一个对象foo second
并使其具有与first
相同的内容(但不是相同的内存位置)。我能做到以下几点来实现这一目标吗?
foo second = new foo();
second = first;
或者这只是将first
和second
设置为相同的内存地址,我只是在内存中的单个对象上有效获取两个句柄?
我读过关于克隆对象的内容,看起来太复杂了。我觉得自从我经历了在foo
中定义新foo second = new foo();
的麻烦后,编译器应该意识到second = first;
打算复制整个事物而不仅仅指向第一个。{1}}。那是怎么回事?
所以我的问题是:为什么这不起作用?上面编译器设置的逻辑有什么缺陷?
答案 0 :(得分:3)
最好的方法是使用复制构造函数。
当您看到有关此clone()
的说法时,请注意它非常有争议并且气馁(如果您想知道原因,则为Google)。值得注意的例外是:数组!
复制构造函数的工作方式如下:
Foo first = new Foo();
first.data="mydata";
Foo second = new Foo(first);
在Foo的另一个Foo的构造函数中,如果它们是复杂的对象,只需使用它们的复制结构复制字段。