SeouliteLab

[Java/자바] System.identityHashCode()와 hashCode()의 차이점 이해하기 본문

카테고리 없음

[Java/자바] System.identityHashCode()와 hashCode()의 차이점 이해하기

Seoulite Lab 2024. 3. 26. 13:54

소개:
Java에서는 객체의 해시 코드를 얻기 위해 System 클래스의 identityHashCode() 메서드와 Object 클래스의 hashCode() 메서드를 제공합니다. 이 둘은 객체의 해시 코드를 얻는데 사용되지만 동작 방식과 목적이 다릅니다. 이 글에서는 두 메서드의 차이점에 대해 자세히 알아보겠습니다.

설정:
추가 설정은 필요하지 않습니다.

System.identityHashCode()와 hashCode()의 차이점:

  • System.identityHashCode(): 이 메서드는 객체의 실제 메모리 주소를 기반으로 하는 해시 코드를 반환합니다. 객체의 동일성을 판단하기 위해 사용됩니다.
  • hashCode(): 이 메서드는 객체의 해시 코드를 반환합니다. 이 해시 코드는 객체의 내용(값)을 기반으로 합니다. 객체의 동등성을 판단하기 위해 사용됩니다.

예제 1: System.identityHashCode() 사용

public class IdentityHashCodeExample {
    public static void main(String[] args) {
        String str1 = "Hello";
        String str2 = new String("Hello");

        // 객체의 실제 메모리 주소를 기반으로 하는 해시 코드
        int hashCode1 = System.identityHashCode(str1);
        int hashCode2 = System.identityHashCode(str2);

        System.out.println("str1의 식별 해시 코드: " + hashCode1); // 출력 결과: str1의 식별 해시 코드: [주소 기반의 해시 코드]
        System.out.println("str2의 식별 해시 코드: " + hashCode2); // 출력 결과: str2의 식별 해시 코드: [주소 기반의 해시 코드]
    }
}

예제 2: hashCode() 사용

public class HashCodeExample {
    public static void main(String[] args) {
        String str1 = "Hello";
        String str2 = new String("Hello");

        // 객체의 내용을 기반으로 하는 해시 코드
        int hashCode1 = str1.hashCode();
        int hashCode2 = str2.hashCode();

        System.out.println("str1의 해시 코드: " + hashCode1); // 출력 결과: str1의 해시 코드: [내용 기반의 해시 코드]
        System.out.println("str2의 해시 코드: " + hashCode2); // 출력 결과: str2의 해시 코드: [내용 기반의 해시 코드]
    }
}

설명:
첫 번째 예제에서는 System.identityHashCode()를 사용하여 두 개의 문자열 객체의 식별 해시 코드를 출력합니다. 두 번째 예제에서는 hashCode()를 사용하여 두 개의 문자열 객체의 해시 코드를 출력합니다. System.identityHashCode()는 객체의 실제 메모리 주소를 기반으로 하기 때문에 두 개의 문자열이 서로 다른 메모리 공간에 위치하더라도 다른 해시 코드를 반환합니다. 하지만 hashCode()는 객체의 내용을 기반으로 하기 때문에 두 개의 문자열이 같은 내용을 가지고 있으면 동일한 해시 코드를 반환합니다.