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