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