hashCode() 메서드는 해싱에 사용되는 해시함수를 구현
해시함수 : 찾고자하는 값을 입력하면, 그 값이 저장된 위치를 알려주는 hashCode를 반환
Object클래스에 정외된 hashCode()는 각 객체들의 주소 값을 이용하여 해시값을 만들기 때문에 서로 다른 두 객체는 절대로 같은 해시 코드를 가질 수 없다.
하지만, hashCode()메서드를 오버라이딩하여 변경도 가능함 (String 클래스 처럼...)
public class HashCodeTest {
public static void main(String[] args) {
String str1 = new String("abc");
String str2 = new String("abc");
System.out.println(str1.equals(str2));
System.out.println(str1.hashCode());
System.out.println(str2.hashCode());
System.out.println(System.identityHashCode(str1));
System.out.println(System.identityHashCode(str2));
}
}
결과
true
96354
96354
366712642
1829164700
1) String클래스는 Object클래스의 equals메서드를 그대로 사용하지 않고, 문자열을 값을 비교하도록 오버라이딩되어있음 (Object클래스의 equal은 참조 변수의 주소 값을 비교함)
2) str1.hashCode()와 str2.hashCode()의 값이 같은 이유 : equals()처럼 String클래스의 hashCode도 Object의 hashCode를 오버라이딩 하여, 두 문자열의 값이 같다면 같은 해시 코드를 반환한다.
3) Object의 hashCode()처럼 주소값으로 해시 코드를 생성하려면 System.identityHashCode()를 사용한다. => str1과 str2가 서로 다른 객체임을 알 수 있음
'JAVA > java' 카테고리의 다른 글
Java 날짜 유효성(포멧) 체크 (1) | 2020.07.14 |
---|---|
toString() (0) | 2020.04.20 |
private (0) | 2020.04.20 |
final (0) | 2020.04.20 |
static (0) | 2020.04.20 |