了解java中的复制构造函数
正如我们所知,java不支持按引用调用,而且如果复制构造函数使用按值调用,那么复制构造函数将递归无限次地调用自己。那么复制构造函数在java中如何工作??了解java中的复制构造函数,java,copy,copy-constructor,Java,Copy,Copy Constructor,正如我们所知,java不支持按引用调用,而且如果复制构造函数使用按值调用,那么复制构造函数将递归无限次地调用自己。那么复制构造函数在java中如何工作?? 提前感谢。与Java中的复制构造函数最接近的等价物是重写对象类的clone()方法。这本书在解释它的用法方面做得相当好 如果使用复制构造函数,则使用按值调用 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){…}
。