충분히 쌓여가는
12.3 Object 클래스 - 객체 해시코드 hashCode()와 equals() 본문
객체 해시코드
객체를 식별하는 정수
Object의 hashCode() 메소드
객체의 메모리 번지를 이용해서 해시코드를 생성하기 때문에 객체마다 다른 정수값을 return 한다
두 객체가 동등한지를 비교할 때 주로 사용
public int hashCode()
hashCode() 메소드 역시 객체의 데이터를 기분으로 재정의해서 새로운 정수값을 return하도록 하는 것이 일반적이다
객체가 다르다 할지라도 내부 데이터가 동일하다면 같은 정수값을 return하기 위해서이다
자바는 두 객체가 동등함을 비교할 때 hashCode()와 equals() 메소드를 같이 사용하는 경우가 많다
1) hashCode()가 return하는 정수값이 같은지 확인
2) equals() 메소드가 true를 return 하는지를 확인하여 동등 객체임을 판단
예시
package ch12.sec03.exam02;
public class Student {
private int no;
private String name;
public Student(int no, String name) {
this.no = no;
this.name = name;
}
public int getNo() {
return no;
}
public String getName() {
return name;
}
@Override
public int hashCode() {
int hashCode = no + name.hashCode();
return hashCode;
}
@Override
public boolean equals(Object obj) {
if(obj instanceof Student target) {
if(no == target.getNo() && name.equals(target.getName())) {
return true;
}
}
return false;
}
}
package ch12.sec03.exam02;
public class HashCodeExample {
public static void main(String[] args) {
Student s1 = new Student(1, "홍길동");
Student s2 = new Student(1, "홍길동");
if(s1.hashCode() == s2.hashCode()) {
if(s1.equals(s2)) {
System.out.println("동등 객체");
} else {
System.out.println("데이터가 다름, 동등 객체 아님");
}
} else {
System.out.println("해시코드가 다름, 동등 객체 아님");
}
}
}
동등 객체
'이것이 자바다 > 12 java.base 모듈' 카테고리의 다른 글
12.3 Object 클래스 - 객체 동등 비교 equals() (0) | 2024.04.08 |
---|---|
12.3 Object 클래스 (0) | 2024.04.08 |
12.2 java.base 모듈 - java.lang, java.util, ... (0) | 2024.04.08 |