为什么Java没有复制构造函数?
2022-08-31 14:17:33
为什么Java不支持像C++那样的复制构造函数?
Java做到了。他们只是没有像在C++那样被含蓄地称为,我怀疑这是你的真正问题。
首先,复制构造函数只不过是:
public class Blah {
private int foo;
public Blah() { } // public no-args constructor
public Blah(Blah b) { foo = b.foo; } // copy constructor
}
现在C++将用如下语句隐式调用复制构造函数:
Blah b2 = b1;
在这种情况下,克隆/复制在Java中根本没有意义,因为所有b1和b2都是引用,而不是像C++那样的值对象。在C++该语句会复制对象的状态。在Java中,它只是复制引用。不会复制对象的状态,因此隐式调用复制构造函数是没有意义的。
这就是它的全部内容。
来自 Bruce Eckel:
为什么[复制构造函数]在C++而不是Java中工作?
复制构造函数是C++的基本部分,因为它会自动创建对象的本地副本。然而,上面的例子证明它不适用于Java。为什么?在Java中,我们操作的所有内容都是句柄,而在C++中,您可以拥有类似句柄的实体,也可以直接传递对象。这就是C++复制构造函数的用途:当您想要获取对象并按值传入它时,从而复制该对象。因此,它在C++中工作正常,但您应该记住,此方案在Java中失败,因此不要使用它。
(我建议阅读整个页面 - 实际上,从这里开始。