巴扎黑2017-05-17 10:09:33
이것은 표면적으로는 "딥 카피"처럼 보입니다. 사실 학생이나 교수 모두 딥 카피를 구현하지 않습니다.
메인 메소드에 여러 출력을 추가합니다:
으아악s1과 s2의 이름은 여전히 "=="인 것을 볼 수 있습니다. p.name이 설정되지 않으면 이름도 "=="이므로 딥 카피가 구현되지 않습니다.
s2.p.name을 설정하면 s2.p.name은 다른 문자열 상수의 주소를 가리키므로 (s1.p.name == s2.p.name) //false
淡淡烟草味2017-05-17 10:09:33
Yours는 기본 데이터 유형만 복사할 수 있는 얕은 복사본입니다. 객체 멤버 변수를 복사하려면 멤버 변수의 복제 메서드도 호출해야 합니다. 이것이 제가 이해하는 방법입니다. 딥 카피#🎜🎜 #
淡淡烟草味2017-05-17 10:09:33
jdk clone 메소드의 기본 구현은 값 복사입니다. 기본 유형의 경우 복사 값입니다. 참조의 경우 복사 참조가 가리키는 주소입니다.
따라서 o.p=(Professor)p.clone();
코드가 없으면 원본 개체의 p와 복제 개체는 얕은 복사본인 동일한 교수 개체를 참조합니다.