equals()、compareTo() 或比较一个对象是否与自身相等的类似方法的调用。
这些方法的方法约定指定了此类调用将始终为 equals() 返回 true 或为 compareTo() 返回 0。
该检查还会检查对 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); // 警告
}
}