2012-11-15 1 views
0

이의 나는 기본적으로같은 유형의 두 객체에있는 모든 변수가 같은지 어떻게 알 수 있습니까? <code>int X</code> 및 <code>int Y</code> :

Object A=new Object(); 
Object B=A; 

이러한 개체 각각 두 개의 int 치의을 .. 두 개체, AB 있다고 가정 해 봅시다. 첫째, 두 AB,

(X == 0) && (Y == 0) 

그래서, 당신은 자바처럼 그 두, 동일 말할 것입니다. 이제 A.XA.X=2으로 변경한다고 가정 해 보겠습니다. 이제 AB

B.X==0

자바는하지만, 여전히이 동일 말한다 .. 더 이상 동일한

A.X==2

..하지만 이후 없습니다.

(A.equals(B)) == true 
(B.equals(A)) == true 

그래서 어떻게 해결할 수 있습니까?

+3

변수가 동일한 객체를 가리키고 있습니다. 그들이 평등하지 않다면 나는 걱정할 것이다! – Perception

+0

A와 B는 같은 대상이므로 B.X == 2입니다. –

답변

3

하지만 BA 가리키는 :

귀하의 클래스로 .equals 방법을 재정의해야합니다. 그래서 유일한 개체.

따라서 A.X = 2을 변경하면 B.X도 동일한 변수를 참조하므로 동일합니다.

B.X 값을 인쇄하여 확인할 수 있습니다.

+0

아, 알겠습니다. 어쨌든 새로운 생성자를 만들 필요없이 객체의 정확한 복제본을 새 객체로 만들 수 있습니까? –

+0

@StevenFontaine 클래스의 ** 복사 생성자 ** (인수에서 자체로 값 복사)를 작성한 다음, 오브젝트 B를 작성하기위한 목적으로 'A'를 인수로 전달하여 다음과 같이 사용하십시오.'Object B = new Object (A); '. 도움이 필요하면 알려주십시오. –

+0

한 가지 질문 만 ..생성자의 본문에는 무엇이 들어 갈까요? 모든 변수를 'A'에서 'B'로 복사하는 몇 줄입니까? –

0

변수가 들어있는 클래스의 .equals 메서드를 재정의해야합니다. 이 질문에 봐 : (그 다음 인 경우는 그 변수가 xy 것) 정말 자신의 클래스가 아닌 java.lang.Object입니다 How to override equals method in java

0

Object 경우 정말 나쁜 클래스 이름을 선택합니다. 새로운 객체를 생성하지 않는,이 Object B=A;을함으로써

@Override 
public boolean equals(Object obj) { 
    if(this == obj) return true; 
    if(!(obj instanceof MyObject)) return false; 
    MyObject other = (MyObject) obj; 
    return other.x == this.x && other.y == this.y; 
} 
1

나는 (미스터 싱 제외) 모두가 여기에 요점 생각 :

Object A=new Object(); // Implication is that this is really a user-defined class 
Object B=A; 

당신은 여기에 하나의 개체가 있습니다. 객체 A를 변경하면 동일한 변경이 정확히 동일한 객체이기 때문에 객체 B에도 동일한 변경이 나타납니다.