ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 자바 hashCode(), identityHashCode()
    Java/자바의정석 2023. 2. 22. 14:38
    반응형

    해시코드란?

    • 객체를 식별할 하나의 정수 값
    • Object는 클래스의 최상위 타입, Object의 hashCode() 메서드는 객체의 메모리 주소를 이용하여 해시 코드를 만들어 리턴하기 때문에 객체마다 다른 값을 가지게 된다.

     

    System.identityHashCode()란?

    • System.identityHashCode()는 객체의 고유한 hashcode를 리턴하는 메소드입니다.
    public static native int identityHashCode(Object x);

    System.identityHashCode()는 역시 Object에 이미 선언되어있다. 해당 코드는 위와 같다.

    객체의 주소값을 int형으로 반환시켜준다.

     

    class Ex9_3 {
        public static void main(String[] args) {
            //String str1 = new String("abc") 는 new 연산자를 이용한 생성법이고,
            //String str2 = "abc"; 는 문자열 리터럴 생성법이다.
            //new 연산자는 메모리의 heap 영역에 할당되고 리터럴 방식은 String Constant Pool 영역에 할당된다.
            //String Constant Pool 영역은 Java Heap Memory 내에 문자열 리터럴을 저장한 공간이며 HashMap으로 구현되어 있다
            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
    460141958
    1163157884


    실행결과를 보면 str1,과 str2의 해시코드가 동일합니다.

    일반적인 객체라면 hashCode()을 결과값이 다르겠지만, String객체이므로 hashCode()값이 동일합니다.

     

    정리

    HashCode()는 오버라이딩이 가능하여 객체마다 유일한값을 변경할수있다.
    System.identityHashCode()메서드는 오버라이딩이 불가능하여 객체의 고유한  hashCode를 int 형으로 리턴

     

     

    반응형

    댓글

Designed by Tistory.