minOS

자바의 정석 ch9-4~6 hashCode(), toString() 본문

TIL/남궁성의 자바의 정석

자바의 정석 ch9-4~6 hashCode(), toString()

minOE 2024. 9. 25. 18:39
728x90

ch9-4 hashCode()

- 객체의 해시코드(hash code)를 반환하는 메서드
- Object클래스의 hash code()는 객체의 주소를 int 로 변환해서 반환
public native int hashCode();​

 

- equals()를 오버라이딩하면,hasCode()도 오버라이딩해야 한다. 왜냐면 equals()의 결과가 true인 두 객체의 해시코드는 같아     야 하기 때문이다.

 

ch9-5~6 toString(), toString()의 오버라이딩

- toString(): 객체를 문자열(String)으로 변환하기 위한 메서드
public String toString() {
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
}​


참고)
getClass -> 설계도 객체

예제

class Card {
    String kind;
    int number;

    Card(String kind, int number) {
        this.kind = kind;
        this.number = number;
    }


    Card() {
        this("SPACE", 1);
    	}
    }
    
    public class Ex9_4 {
    public static void main(String[] args) {
        Card c1 = new Card();
        Card c2 = new Card();
        System.out.println(c1.toString());
        System.out.println(c2.toString());
        }
   }


출력 결과

                                                                       클래스이름과@주소값변환한값



toString() 오버라이딩

class Card {
    String kind;
    int number;

    Card(String kind, int number) {
        this.kind = kind;
        this.number = number;
    }


    Card() {
        this("SPACE", 1);
    }


    // Object클래스의 toString()을 오버라이딩
    public String toString() {
        return "kind : " + kind + ", number:" + number;
    }
}

public class Ex9_4 {
    public static void main(String[] args) {
        Card c1 = new Card();
        Card c2 = new Card();
        System.out.println(c1.toString());
        System.out.println(c2.toString());

출력결과


객체 == iv 집합 !
객체를 문자열로 변환한다는 것은 iv값을 문자열로 변환한다는 것과 같다.
예제예제예제예제

 

예제

import java.util.Objects;

class Card {
    String kind;
    int number;

    Card(String kind, int number) {
        this.kind = kind;
        this.number = number;
    }


    Card() {
        this("SPACE", 1);
    }


    // Object클래스의 toString()을 오버라이딩
    public String toString() {
        return "kind : " + kind + ", number:" + number;
    }

    //equals()를 오버라이딩하면 hashCode()도 오버라이딩 해야한다.
    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 class Ex9_4 {
    public static void main(String[] args) {
        Card c1 = new Card();
        Card c2 = new Card();
        System.out.println(c1.toString());
        System.out.println(c2.toString());
        System.out.println(c1.equals(c2));

        System.out.println(c1.hashCode());
        System.out.println(c2.hashCode()); //hashCode() 주석처리하면 다른 값나옴
    }

}


출력결과

 

728x90