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); // 警告
}
}