Object 클래스의 hashCode 메서드에서는 Java 플랫폼에서 특정 개체를 빠르게 검색할 수 있게 해쉬 테이블에 저장하는 것과 연관이 있습니다. hashCode는 해당 개체를 해쉬 테이블에 저장하였을 때 빨리 찾기 위한 해쉬 코드값을 반환하는 것입니다. 실제 프로그램 실행에서 서로 다른 개체가 같은 해쉬 코드값을 갖을 확률은 지극히 낮기 때문에 개체를 판별하는데 사용하는 이도 있지만 이는 완벽한 신뢰성을 보장한다고 볼 수는 없습니다. 확률적으로 같은 값을 반환하는 것이 낮은 것일 뿐 절대적인 것은 아니기 때문입니다.
물론 개발자는 이 hashCode 메서드를 재정의할 수 있습니다. 다음 예제에서는 정적 멤버로 seq를 선언하고 개체를 생성할 때마다 1씩 증가한 후에 개체의 멤버 hv 에 대입하였습니다. 그리고 hashCode 메서드를 재정의하여 유일한 값으로 사용할 수 있게 하였습니다.
그렇지만 이러한 방법을 추전하는 것은 아니며 이렇게 할 수도 있다는 것을 보여주는 것일 뿐입니다.
다음 코드는 hashCode 메서드 재정의 예제입니다.
//hashCode 메서드를 재정의 public class MyInt { static int seq=0; int value; int hv; public MyInt(int value){ seq++; hv = seq; this.value = value; } public int hashCode(){ return hv; } }
//hashCode 메서드 재정의 예 public class Program { public static void main(String[] args){ MyInt mi1 = new MyInt(1); MyInt mi2 = new MyInt(1); System.out.println(mi1.hashCode()); System.out.println(mi2.hashCode()); } }
실행 결과
1 2