2016-07-24 3 views
-3

이 객체의 복사본을 만들기 위해, 우리는 같은 새로운 객체에 할당 의? 개체 a와 b는 같은 위치를 가리킬 것이므로 서로 의존적이라고 생각합니다. 그래서 하나의 값을 변경하면 다른 개체도 변경됩니다. 잘못 되었다면 수정하십시오.일반적으로

또한이 방법이 복제와 다르거 나 복제만으로 간주 할 수 있습니다.

복제하는 경우이 복제가 얕은가?

+0

이미 잘못되었습니다. 이 할당은 객체의 복사본을 만들지 않습니다. * same * 객체에 대한 또 다른 참조를 만듭니다. – EJP

답변

0

전혀 복제되지 않습니다. a와 b가 동일한 동일한 객체를 가리키는 것과 동일한 객체에 다른 이름을 지정하는 것입니다.

1

첫 번째 문은 메모리에 새로 생성 된 개체를 가리키는 포인터를 만들었습니다. 두 번째 명령문은 변수 위치를 동일한 위치로 설정합니다. 이는 두 포인터가 메모리의 같은 객체를 가리킨다는 것을 의미합니다. 그리고 네, 당신은 어떤 포인터에서 객체의 상태를 바꿀 수 있습니다. 포인터는 메모리의 주소와 같습니다.

복제가 다른 것입니다. 기본적으로 다른 위치에있는 개체의 전체 복사본을 만들고 변수를 사용하여 개체를 가리 킵니다. 그래서

Object a = new Object(); 개체 b = a.clone();

이제 b는 메모리의 새 객체를 가리 킵니다. 처음에는 두 개체가 동일하지만 완전히 연결이 끊어집니다. 오브젝트 a를 변경해도 오브젝트 b에는 영향을주지 않습니다.

샤흐 자이드

0

두 참조 모두 동일한 개체를 가리 킵니다.

Object.clone() 메서드의 out of box 구현은 단순 복사를 수행합니다. 객체에 주소 객체가있는 직원 객체를 말할 수있는 내부 연결이 하나있는 경우 Employee 객체를 복제 할 때 Object.clone()을 사용하면 프리미티브 속성 만 복사됩니다. 원본 복사본과 복제 된 복사본 모두 동일한 주소 개체를 가리 킵니다.

딥 복제를 달성하는 한 가지 방법은 사용자 직렬화입니다. 먼저 개체를 serialize 한 다음 개체를 deserialize하십시오. 자바는 비 직렬화 중에 모든 새로운 객체를 생성합니다.

0

복제 안함 Object a = new Object(); 객체 b = a; 이것은 'a'와 'b'가 같은 메모리 위치를 가리키고 있음을 의미합니다. 우리가 물건을 복제 할 때. 다른 객체의 상태는 새로운 객체에는 저장되지만 메모리 위치에는 저장되지 않습니다.