JAVA/자바의 정석

[자바의 정석 - 기초편] 9. (1) Object 클래스 ( equals(Object obj) / hashCode() / toString() )

서영22 2023. 12. 4. 23:21

 Object 클래스 

모든 클래스의 최고 조상. 오직 11개 메서드만 가지고 있음

 

 

 

 

 equals(Object obj) 

객체 자신(this)과 주어진 객체(obj)를 비교 ➔ 같으면 true / 다르면 false

 

- Object 클래스의 equals()는 객체의 주소를 비교 (참조변수 값 비교)

public boolean equals(Object obj) {
        return (this == obj);
}

 

 

 

 

 

equals(Object obj)의 오버라이딩

 

인스턴스 변수(iv)의 값을 비교하도록 equals()를 오버라이딩 해야 함

 

 

 

 

중간에 이렇게변경해도 가능

 

 

 

 hashCode() 

객체의 해시코드(hash code)를 반환하는 메서드

 

 

- Object클래스의 hashCode()는 객체의 주소를 int로 변환해서 반환

public class Object {
       ...
       public native int hashCode();

 

 

 

- equals()를 오버라이딩하면, hashCode()도 오버라이딩 해야 함

 

   ➔  equals()의 결과가 true인 두 객체의 해시코드는 같아야하기 때문

String str1 = new String ("abc");
String str2 = new String ("abc");
System.out.println(str1.equals(str2));  // true
System.out.println(str1.hashCode);    // 96354
System.out.println(str2.hashCode);    // 96354

 

 

- System.identityHashCode(Object obj)는 Object 클래스의 hashCode()와 동일

(* 객체마다 다른 해시코드 반환하는 메서드)

System.out.println(str1.hashCode);    // 3526198
System.out.println(str2.hashCode);    // 7699138

 

 

 

 toString() 

객체를 문자열(String)으로 변환하기 위한 메서드

(= iv값들을 문자열로 변환)

 

 

 

toString()의 오버라이딩

 

 

오버라이딩 전 : 객체 주소값 출력

오버라이딩 후 : 객체가 갖고있는 iv값 출력

 

 

 

< 예제 >