2012-10-24 4 views
0

방금 ​​자바를 배우기 시작했고 같은 것을 보았습니다. equals와 ==의 차이를 찾은 후에는 직접 연습하기로 결정했지만 기대되는 결과를 얻지는 못했습니다. 여기에 코드입니다 :은 java 예기치 않은 결과와 같습니다.

public class Sandbox { 

/** 
* @param args 
* 
*/ 
private int a; 
public void setAtta(int value){a=value;} 
public int getAtta(){return a;} 

public static void main(String[] args) { 
    // TODO Auto-generated method stub 
    Sandbox s = new Sandbox(); 
    s.setAtta(10); 
    Sandbox s1 = new Sandbox(); 
    s1.setAtta(10); 

    System.out.println(s==s1);//false- EXPECTED 
    System.out.println(s.equals(s1));//false- I thought it should be true? 


} 

} 
+0

세터 수완 이름의 시작 (g/s)의 – Abubakkar

+2

최초의 구글 결과 작은 문자로 시작 "java. equals"는 잘 설명합니다. http://www.leepoint.net/notes-java/data/expressions/22compareobjects.html –

+0

또는 http://www.javaworld.com/javaworld/jw-06- 2004/jw-0614-equals.html 또는 http://www.artima.com/lejava/articles/equality.html –

답변

5

Object.equals은 Java에서 ==과 동일합니다. 즉, 참조 평등을 테스트합니다. Sandbox 클래스 (암시 적으로)는 Object을 확장하고 equals을 무시하지 않으므로 s.equals(s1)Object.equals입니다.

원하는 동작을 얻으려면, 클래스에 equals 방법 (재정의) 추가 :

public boolean equals(Object obj) { 
    if(this == obj) return true; 
    if(!(obj instanceof Sandbox)) return false; 
    Sandbox that = (Sandbox)obj; 
    return this.a == that.a; 
} 
1

이 작동하는 방법입니다

equalsObject 클래스 방법 당신이 override을 할 수 있습니다.

String 클래스에서 이미 오버라이드되어 있습니다.

코드를 작동 시키려면 코드 예제 코드 equals을 정의해야합니다. 분명히 Object 클래스의 코드는 sandbox 클래스에는 유효하지 않기 때문입니다. equals위한

메소드 서명은 다음

public boolean equals(Object obj); 
1

==equals와의 차이는 참조에 == 검사 평등 값 equals 검사 평등. 말 해주세요, 물건의 가치는 무엇입니까? 그래서 결과가 거짓입니다. equalssandbox으로 재정의되지 않으면 Object 클래스의 equals이 호출됩니다. 사용자 지정 개체 간의 동일성을 확인하려면 equals 함수를 재정의해야합니다.

+0

객체에는 값이 있습니다. 'equals'는 단순히 오버라이드되지 않는 한'Object'에서 상속받은 참조 검사입니다. – nneonneo

+0

@nneonneo - 올바르지 않습니다. 'this'는 현재 객체에 대한 포인터이지만이 참조를 저장하는'Object' 클래스에는 필드가 없습니다. –

+0

"가치"에 대한 추상적 개념을 고려하고있었습니다. 다른 의미가 없으므로 객체의 "가치"자체입니다. – nneonneo

2
equals() method in object class, just use == comparison behind the screen. So you got it  as false. So you need to override it and give your implementation as needed. 

public boolean equals(Object o){ 
if(o instanceof SandBox){ 
    if(((SandBox)o).a==this.a){ 
     return true; 
    } 
} 
return false; 
}