equals(), compareTo() 또는 이와 유사한 호출을 보고합니다.
이러한 메서드의 메서드 컨트랙트는 이러한 호출이 true(equals() 호출 시) 또는 0(compareTo() 호출 시)을 항상 반환하도록 지정합니다.
이 검사는 Objects.equals(), Objects.deepEquals(),
Arrays.equals(), Comparator.compare(), 테스트 프레임워크(JUnit, TestNG, AssertJ)의 assertEquals() 메서드, Integer.compare(), Integer.compareUnsigned() 및 유사한 메서드의 호출도 검사합니다.
매우 드물게 양쪽의 표현식이 같으나 별도의 객체를 생성하고 콘텐츠가 아닌 참조를 바탕으로 비교가 이뤄지므로, 검사가 false를 반환하는 equals() 호출을 보고할 수 있습니다.
가장 간단한 예시는 new Object().equals(new Object())입니다. 어떠한 경우든 이러한 호출은 의심스러우며 다른 의도였을 수 있습니다.
예:
class Foo {
boolean foo(Object o) {
return o.equals(o); // 경고
}
boolean bar(String[] ss) {
return Arrays.equals(ss, ss); // 경고
}
}