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