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


