[Java] equals, hashCode

양정훈·2022년 8월 8일
0

equals

  • 두 객체가 동일한지 검사하는 메소드
  • 기본적으로 두 객체의 참조값을 비교함

String

  • String의 경우 String class 내부적으로 equals를 Overriding해 값 비교를 하도록 되어 있음
String foo = new String("Foo"):
String bar = new String("Foo"):

foo == bar // false
foo.equals(bar) // true

hashCode

Runtime 중의 객체의 유일한 integer 값을 반환하는 메소드
Object 클래스는 heap memory 주소를 반환함 (아닌 경우도 있음)

  • 한 Runtime 내에서, equals의 값이 변경되지 않았다면 hashCode도 동일한 값을 반환해야함
  • 두 객체가 equals하다면 hashCode도 같아야 함
  • 두 객체의 equals가 동일하지 않아도, hashCode는 같을 수 있음 (해시 충돌)
    • hashCode의 반환형은 integer이고, 객체의 가짓수가 32bit를 넘어설 수 있기 때문

equals, hashCode

  • equals를 재정의했다면 (ex. reference가 아닌 value 비교를 하도록) hashCode도 동일하게 동작하도록 재정의해야함
    • HashSet, HashMap, HashTable 내부적으로 hashCode가 다르면 다른 객체로 판단하기 때문

0개의 댓글