hashCode()
- 객체의 해시코드(hash code)를 반환하는 메서드
- Object클래스의 hashCode()는 객체의 주소를 int로 변환해서 반환
- equals()를 오버라이딩하면, hashCode()도 오버라이딩 해야한다.
(∵ equals() 결과가 true인 두 객체의 해시코드는 같아야 하기 때문)
class Card {
String kind;
int number;
Card(){
this("SPADE", 1);
}
Card(String kind, int number){
this.kind = kind;
this.number = number;
}
public boolean equals(Object obj) {
if(!(obj instanceof Card)) return false;
Card c = (Card)obj;
return this.kind.equals(c.kind) && this.number==c.number
}
public int hashCode() {
return Objects.hash(kind, number);
}
public String toString(){
return "kind : " + kind + ", number : " + number;
}
}
- cf. System.identityHashCode(Object obj)는 Object클래스의 hashCode()와 동일
toString()
- 객체를 문자열(String)으로 변환하기 위한 메서드
public String toString(){
return getClass().getName()+"@"+Integer.toHexString(hashCode());
}
public String toString(){
return "kind : " + kind + ", number : " + number;
}
main
class Ex9_4 {
public static void main(String[] args){
Card c1 = new Card();
Card c2 = new Card();
System.out.println(c1.equals(c2));
System.out.println(c1.toString());
System.out.println(c2.toString());
System.out.println(c1.hashCode());
System.out.println(c2.hashCode());
}
}
- 결과
true
kind:SPADE, number:1
kind:SPADE, number:1
-1842861219
-1842861219