9-4~6 hashCode(), toString()

oyeon·2020년 12월 22일
0

Java 개념

목록 보기
10/70

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
    }
    // equals()를 오버라이딩하면 hashCode()도 오버라이딩 해야한다.
    public int hashCode() {
         return Objects.hash(kind, number);
    }
    // Object클래스의 toString()을 오버라이딩
    public String toString(){
         return "kind : " + kind + ", number : " + number;
    }
}
  • cf. System.identityHashCode(Object obj)는 Object클래스의 hashCode()와 동일

toString()

  • 객체를 문자열(String)으로 변환하기 위한 메서드
public String toString(){ //Object클래스의 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
profile
Enjoy to study

0개의 댓글