이펙티브 자바 3장 Item10를 요약한 내용입니다.
1. 각 인스턴스가 본질적으로 고유한 경우
2. 논리적 동치성(값이 같은지) 비교할 일이 없는 경우
3. 상위 클래스의 equals를 수정할 필요가 없는 경우
4. 클래스가 privatea나 package-private이고 equals를 수정할 필요가 없는 경우
1. 반사성 : x.equals(x)는 true
2. 대칭성 : x.equals(y)가 true이면 y.equals(x)도 true
3. 추이성 : x.equals(y)가 true이고 y.equals(z)가 true이면 x.equals(z)도 true
4. 일관성 : x.equals(y)를 반복했을 때 항상 같은 값
5. null 아님 : x.equals(null)은 false
1. == 연산자로 물리적 동치성 확인
2. instanceof 연산자로 입력타입 확인
3. 형변환
4. 핵심 필드 검사
float와 double을 제외한 기본 타입은 ==연산자로 비교
참조타입 필드는 equals
float, double은 Float.compare, Double.compare
배열은 Arrays.equals
다를 가능성이 크거나 비교 비용이 낮은 필드 먼저 검사
파생필드를 비교하는 쪽이 더 빠르면 파생필드먼저 비교
equals를 재정의할 때는 hashCode도 재정의
equals의 입력타입은 항상 Object, @Override 사용
[이펙티브 자바] Item 12. toString을 항상 재정의하라 | 3장 (0) | 2023.05.24 |
---|---|
[이펙티브 자바] Item 11. equals를 재정의하려거든 hashCode도 재정의하라 | 3장 (2) | 2023.05.10 |
[이펙티브 자바] Item 9. try-finally 보다 try-with-resources를 사용하라 | 2장 (0) | 2023.04.12 |
[이펙티브 자바] Item 8. finalizer와 cleaner 사용을 피하라 | 2장 (1) | 2023.04.12 |
[이펙티브 자바] Item 7. 다 쓴 객체 참조를 해제하라 | 2장 (0) | 2023.04.05 |