equals() 와 == 의 차이
== 는 주소값
equals() 는 객체의 값 자체를 비교
String s1 = "apple";
String s2 = "apple";
if (s1.equals(s2)) {
... //실행됨
}
if (s1 == s2) {
... // 실행되지 않음
}
Java
복사
equals() 오버라이딩
•
equals()는 모든 객체의 부모 클래스인 Object에 정의되어있는 메소드다
•
기본적인 equals() 는 객체의 주소값을 비교한다
public boolean equals(Object obj) {
return (this == obj);
}
Java
복사
•
주소값이 아닌 내용물을 비교하기 위해서는 equals()를 재정의를 해야한다
- hashCode() 메서드를 재정의했다고 객체의 내부 주소가 바뀌는 것은 아니
Java
복사
class Person {
int id;
public boolean equals(Object obj) {
if(obj instanceof Person)
return id == ((Person)obj).id;
else
return false;
}
Person(long id){
this.id=id;
}
}
Java
복사
equals()를 재정의할 땐 hashCode도 반드시 재정의해야 한다
•
두 객체를 equals로 비교 했을 때 같은 값을 가졌다면 마찬가지로 같은 hashCode를 가져야 하는데, hasCode를 재정의 하지 않으면 각기 다른 객체로 인식하여 각기 다른 hashCode를 생성하게 된다