equals
- 두 객체가 동일한지 검사하는 메소드
- 기본적으로 두 객체의 참조값을 비교함
String
- String의 경우 String class 내부적으로 equals를 Overriding해 값 비교를 하도록 되어 있음
String foo = new String("Foo"):
String bar = new String("Foo"):
foo == bar
foo.equals(bar)
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가 다르면 다른 객체로 판단하기 때문