java - 해쉬코드(HashCode)

imjingu·2023년 8월 31일
0

개발공부

목록 보기
437/481

자바에서는 인스턴스를 힙 메모리에 생성하여 관리할 때 해시 알고리즘을 사용
Object 클래스의 toString() 메서드 원형을 다시 살펴보면 getClass().getName() + "@" + Integer.toHexString(hashCode()).
즉 우리가 참조변수를 출력할 때 본 16진수 숫자 값이 해시코드 값이고 이 값은 자바가상머신이 힙 메모리에 저장한 인스턴스 주소 값
그래서 자바에서는 두 인스턴스가 같다면 hashCode()에서 반환하는 해시코드 값이 같아야 함

package chapter20230831;

class Comp2 {
	String name;
	Comp2(String name) {
		this.name = name;
	}
}

public class HashCode {

	public static void main(String[] args) {
		Comp2 comp1 = new Comp2("비교1");
		Comp2 comp2 = new Comp2("비교2");
		System.out.println(comp1.hashCode()); // 1927950199 힙메모리 주소
		System.out.println(comp2.hashCode()); // 868693306
		
		// String, Integer 클래스의 hashCode() 메서드 재정의
		String str1 = new String("abc");
		String str2 = new String("abc");
		
		System.out.println(str1.hashCode()); // 96354. abc 문자열의 해시코드 값 출력
		System.out.println(str2.hashCode()); // 96354. abc 문자열의 해시코드 값 출력
		
		Integer i1 = new Integer(100);
		Integer i2 = new Integer(100);
		
		System.out.println(i1.hashCode()); // 100. Integer(100)의 해시코드 값 출력
		System.out.println(i2.hashCode()); // 100. Integer(100)의 해시코드 값 출력


	}

}

0개의 댓글