equals는 일반 규약을 지켜서 오버라이딩한다. 아래의 상황에서는 절대 오버라이딩하지 않는다

오버라이딩하는 경우

  1. 논리적 동치성을 검사해야 할 때

*규약이 있는데 일단 53페이지 읽어보기

왜 equals()를 오버라이딩하나 했더니 두 객체가 같은 지 비교하는 기준을 더 추가하거나 바꾸고 싶어서였다.

예: 두 도형이 같다고 하고 싶을 때 점의 위치 + 색상도 같을 때 같다고 하고 싶어서.

구체 클래스를 확장해 새 값을 추가하면서 equals 규약을 만족시킬 방법은 없다.

리스코프의 치환 원칙에 따르면 Point의 하위 클래스틑 정의상 여전히 Point여서 어디서든 Point로서 활용될 수 있어야 한다.

클래스가 불변이든 가변이든 equals의 판단에 신뢰할 수 없는 자원이 끼어들게 해서는 안된다.

예: 호스트 이름을 IP 주소로 바꾸려면 네트워크를 통해야 하는데 결과 같음 보장이 안된다.

모든 객체가 null과 같지 않아야 한다.

*== null 비교보다 instanceof로 매개변수가 올바른 타입인지 검사하는 검사가 더 낫다.