了解java中的复制构造函数

时间:2016-08-02 14:46:00

标签: java copy copy-constructor

我们知道java不支持引用调用,而且如果使用复制构造函数我们使用call by value,那么复制构造函数会递归调用自身无限次。那么复制构造函数如何在java中工作? 提前谢谢。

3 个答案:

答案 0 :(得分:0)

与Java中的复制构造函数最接近的等价物是覆盖clone()类的Object方法。 javadocs在解释其用法方面做得相当不错。

答案 1 :(得分:0)

  

如果使用复制构造函数,我们使用按值调用

Java内置了没有复制构造函数。您可以创建自己的一个,但仅在您明确调用它时使用。对于Java来说,它只是另一个没有特殊含义的构造函数。

Java只有原始和引用变量,当复制它们时,不会调用任何方法或构造函数。

e.g。在此示例中,它是复制的引用,而不是对象。

Integer i = 5; // A *reference* to an Integer object.
Integer i = j; // A *reference* to the same object.
  

复制构造函数将无限次地递归调用自身。

一个常见的误解是Java没有Object变量类型。

答案 2 :(得分:0)

任何对象的Java拷贝构造函数都是此对象的深层副本。 例如,

 public Car(String motorShow, double price) {
     this.motorShow = motorShow;
     this.price = price;
 }  ^ ordinary constructor for a Car object


//the copy constructor for Car:
  public Car(Car other) {
    this.motorShow = other.motorShow;
    this.price = price;
  }   
/* Simply in the main class write Car c2 = new Car(c1);    

 this basically will create a copy of c1 of, and note that changing the attributes of one of the objects won't affect the other since it's a deep copy; unlike this for example:
 Car c1 = c2;
 here, changing any attribute of c1 or c2 will affect the other, i.e two pointers for the same space or reference in memory  */

我希望这会有所帮助。