2013-11-27 3 views
0

자바에서 이상한 문제가 있습니다. 나는 디버깅하는 동안 모든 문제를 해결했다. 이 두 줄에서 발생합니다 :객체 변수 할당 동작 이해

q=p; 
q.addPair(2,3); 

노트 : p, q는 내가 정의한 새로운 클래스입니다. 이 클래스에는 public function addPari(int, int)이 있습니다. 여기

내가 기대했던 것입니다 : pq에, 다음 q 사용 q.addPair()을 변경할 수 있지만 이전과 p 같은 남겨 복사합니다.

나는 이것이 작동 할 수 있다고 생각했지만, 어쨌든 q.addPair(2,3)pq을 모두 변경합니다. 누구든지 저를 도울 수 있습니까?

+0

Java는 아무 것도 복사하지 않습니다. – SLaks

답변

5
q=p; 

실제로 복사되지 않습니다. 즉, q을 수정하면 동일한 인스턴스이므로 p을 수정한다는 의미입니다. 당신이 q이 새로운 객체를하고 싶다면

, 당신은 new를 사용해야합니다 : 즉

q = new MyObject(p); 

, 당신은 p의 새 복사본을 만들 copy constructor을 사용하고 있습니다. 클래스에 복사 생성자가없는 경우 새로 생성해야합니다. 기존 객체에서 새 객체를 생성 할 수 있어야합니다. 주어진 인스턴스 p에서 적절한 값을 복사하여이 작업을 수행 할 수 있습니다.

+2

이것에 대한 메모. Java는 기본적으로 복사 생성자를 제공하지 않으므로'P'와'Q'가 인스턴스 인 클래스에서 직접 복사 생성자를 구현해야합니다. – Tenner

0

하지만, 대신 P의 인스턴스를 가리키는 질문에 대한 참조를 만듭니다. 이제 2 개의 변수가 동일한 객체를 가리 킵니다.