hashCode()
- 객체의 해시코드(hash code)를 반환하는 메서드
- Object클래스의 hashCode()는 객체의 주소를 int로 변환해서 반환
- equals()를 오버라이딩하면, hashcode()도 오버라이딩 해야함!
- equals()는 주소를 iv를 가지고 작업하게 오버라이딩함. 마찬가지로 hashcode도 똑같은 방식으로 오버라이딩 해야함.
-> 중요:
equals()의 결과가 true인 두 객체의 해시코드는 같아야 하기 때문에!!
String str1 = new String("abc");
String str2 = new String("abc");
System.out.println(str1.equals(str2));
System.out.println(str1.hashcode());
System.out.println(str2.hashcode());
toString(), toString()의 오버라이딩
- toString() : 객체를 문자열(String)으로 변환하기 위한 메서드
- toStirng()을 오버라이딩함으로써
test.Card@1d81eb93
과 같은 클래스 주소가 출력되는 것이 아닌 kind:SPADE, number:1
꼴의 iv객체의 값이 출력되게 했음!
class Card {
String kind;
int number;
Card() {
this("SPADE", 1);
}
Card(String kind, int number) {
this.kind = kind;
this.number = number;
}
public int hashCode() {
return Objects.hash(kind, 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 String toString() {
return "kind: "+kind+", number:"+number;
}
}
public class Ex1 {
public static void main(String[] args) {
Card c1 = new Card();
Card c2 = new Card();
System.out.println(c1.equals(c2));
System.out.println(c1.hashCode());
System.out.println(c2.hashCode());
System.out.println(c1.toString());
System.out.println(c2.toString());
}
}