Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
了解java中的复制构造函数_Java_Copy_Copy Constructor - Fatal编程技术网

了解java中的复制构造函数

了解java中的复制构造函数,java,copy,copy-constructor,Java,Copy,Copy Constructor,正如我们所知,java不支持按引用调用,而且如果复制构造函数使用按值调用,那么复制构造函数将递归无限次地调用自己。那么复制构造函数在java中如何工作?? 提前感谢。与Java中的复制构造函数最接近的等价物是重写对象类的clone()方法。这本书在解释它的用法方面做得相当好 如果使用复制构造函数,则使用按值调用 Java中没有内置的复制构造函数。您可以自己创建一个,但这仅在显式调用它时使用。对于Java来说,它只是另一个没有特殊意义的构造函数 Java只有原语和引用变量,当复制它们时,不会调用任

正如我们所知,java不支持按引用调用,而且如果复制构造函数使用按值调用,那么复制构造函数将递归无限次地调用自己。那么复制构造函数在java中如何工作??
提前感谢。

与Java中的复制构造函数最接近的等价物是重写
对象
类的
clone()
方法。这本书在解释它的用法方面做得相当好

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

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

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

e、 g.在本例中,复制的是引用,而不是对象

Integer i = 5; // A *reference* to an Integer object.
Integer i = j; // A *reference* to the same object.
复制构造函数将递归无限次地调用自身


一个常见的误解是Java有对象变量类型,而它没有。

任何对象的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  */

我希望这有帮助。

什么复制构造函数?因为传递的值是引用的值。不是每次都复制实例。@4castle Copy constructor:-用于从同一类类型的另一个类对象复制一个类对象是的,但为什么它会递归调用自己?复制构造函数不调用其他构造函数。
对象的值是其引用。
-否,引用的值是对该对象的引用。对象的值就是它的内容。例如
String s=new String(“reference me”)
s
将是对正在创建的字符串的引用。如果您执行
字符串s2=s你创建了另一个指向同一个对象的引用,而你没有做任何对象构造。根据java中的u,这是行不通的:类Copy{int x,y;Copy(int x,int y){this.x=x;this.y=y;}void show(){System.out.println(x);System.out.println(y);}Copy(Copy z){this.x=z.x;this.y=z;}publicstaticvoidmain(String…s){copyc1=newcopy(10,20);c1.show();copyc2=newcopy(c1);c2.show();}}@sagg1295请查看您的评论。在它当前的形式中,它没有任何意义。@sagg1295我是说这个问题没有意义,因为它不适用于Java。没有对象或结构变量类型,因此没有复制构造函数。(java 10可能有它们)@ sg121295代码(拷贝){这个x.= z .x;这个y= z .y;}可以被看作是某种拷贝构造函数(虽然不是C++使用它们),这是可能的。此外,正如我已经提到的,这里没有涉及递归。将引用
z
传递给构造函数,并使用它访问被引用对象的值
x
y
(因为它是一个引用,甚至可以称为指针,所以可以为null)@sagg1295我已经更新了我的答案,说你可以做一些类似复制构造函数的事情,但它必须被显式调用,因为它没有隐式的语言支持。没有递归的风险。另一种形式的“复制构造函数”类似于
MyClass(MyClass-source){…}