为什么Java没有复制构造函数?

2022-08-31 14:17:33

为什么Java不支持像C++那样的复制构造函数?


答案 1

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中,它只是复制引用。不会复制对象的状态,因此隐式调用复制构造函数是没有意义的。

这就是它的全部内容。


答案 2

来自 Bruce Eckel

为什么[复制构造函数]在C++而不是Java中工作?

复制构造函数是C++的基本部分,因为它会自动创建对象的本地副本。然而,上面的例子证明它不适用于Java。为什么?在Java中,我们操作的所有内容都是句柄,而在C++中,您可以拥有类似句柄的实体,也可以直接传递对象。这就是C++复制构造函数的用途:当您想要获取对象并按值传入它时,从而复制该对象。因此,它在C++中工作正常,但您应该记住,此方案在Java中失败,因此不要使用它。

(我建议阅读整个页面 - 实际上,从这里开始


推荐