Я изучаю Java и недавно перешел к учебному курсу «Копировать конструктор». Я попытался написать код Copy Constructor, но он дает неожиданный результат.Java Copy Constructor работает не так, как ожидалось
Вопрос:
Почему первый выход показывает 0
и null
значения?
Вот объект с копией конструктора:
class student6 {
int id;
String name;
int i;
String n;
student6(int a, String b) {
id = a;
name = b;
}
student6(student6 s) {
i = s.id;
n = s.name;
}
void display() {
System.out.println(i + "..." + n);
}
public static void main(String args[]) {
student6 s1 = new student6(11, "Suresh");
student6 s2 = new student6(s1);
s1.display();
s2.display();
}
}
Выход
0...null
11...Suresh
Почему вы имеете 'i' и' n' поля на всех? Что вы ожидали от них? –
FYI, в Java нет «конструктора копирования».В C++ конструктор копирования имеет определенную сигнатуру arg, которая признана компилятором специальной. Компилятор испускает _implicit_ вызовы в конструктор копирования в определенных ситуациях (например, при передаче объекта в функцию по значению) В Java ничего подобного не происходит, потому что переменная Java никогда не может содержать объект: 'Foo a;' всегда является _reference_ к объекту, где бы вы его ни увидели. Созданный вами конструктор может _work_ как конструктор копии C++, но компилятор Java не относится к нему иначе, чем к любому другому конструктору. –
Спасибо @jameslarge. Да, это правильно. У C++ есть конструктор копирования, но Java не имеет. Здесь я просто «пытаюсь» получить экземпляр типа конструктора из этой программы. – Aaditya