문서의 이전 판입니다!
public boolean equals([ClassName] other) { // 잘못된 equals!! } // 다음이 올바르다. 무조건 다음과 같이한다. public boolean equals(Object other) { ... }
equals
가 사용하는 필드와 hashCode
가 사용하는 필드를 동일하게 맞춰야 한다.HashSet.contains
등이 올바르게 작동하지 않게 된다. HashSet은 hashCode 기반으로 bucket을 결정한다. equals(Object)
호출시 true
라면 두 객체의 hashCode()
는 동일한 int 를 리턴해야 한다.hashCode
는 equals
에서 사용한 필드들만을 사용해야한다.equals
, hashCode
를 구현한 상태에서 해당 필드 값을 변경하면 동일 객체라도 hashCode가 바뀌게 된다.false
가 될 가능성이 높은 잘못된 코딩이다.