Поскольку мы знаем, что java не поддерживает вызов по ссылке, и также верно, что если с помощью конструктора копирования мы используем вызов по значению, то конструктор копирования будет называть себя рекурсивно бесконечным временем. Затем, как работает конструктор копирования в java ?? Спасибо заранее.Знание о конструкторе копирования в java
ответ
если с копией конструктора мы используем вызов по значению
Там нет конструктора копирования, встроенной в Java. Вы можете создать свой собственный, но он используется только при явном вызове. Для Java это просто еще один конструктор, который не имеет особого значения.
Java имеет примитивную и ссылочную переменную, и при их копировании не вызывается метод или конструктор.
например. В этом примере это копия, а не объект.
Integer i = 5; // A *reference* to an Integer object.
Integer i = j; // A *reference* to the same object.
конструктор копирования будет рекурсивно вызывать себя бесконечное число раз.
Распространенное заблуждение состоит в том, что Java имеет переменные типа Object, когда это не так.
, в соответствии с u в java это не сработает: class Copy { \t int x, y; \t Копия (int x, int y) \t { \t \t this.x = x; \t \t это.у = у; \t} \t недействительного шоу() \t { \t \t System.out.println (х); \t \t System.out.println (y); \t} Копировать (Копировать г) \t { \t \t this.x = z.x; \t \t this.y = z.y; \t} \t государственной статической силы основных (String ... s) \t { \t \t Copy c1 = новый Copy (10,20); \t \t c1.show(); \t \t Копия c2 = новая копия (c1); \t \t c2.show(); \t} } – sagg1295
@ sagg1295, пожалуйста, взгляните на ваш комментарий. В его нынешнем виде это не имеет никакого смысла. – Thomas
@ sagg1295 Я говорю, что вопрос не имеет смысла, потому что он не применяется в Java. Нет типов объектов или структурных переменных и, следовательно, нет конструктора копирования. (Тем не менее, Java 10 может иметь их) –
Конструктор копирования 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
Я не понимаю. –
Поскольку переданное значение является значением ссылки. Экземпляр не копируется каждый раз. –