String
Javaのの等価性をテストするときは、equals()
これが最も自然な方法のように思えるため、常に使用しました。結局のところ、その名前はすでに意図されていることを示しています。しかし、私の同僚は最近、のcompareTo() == 0
代わりに使用するように教えられたと私に言ったequals()
。これは不自然に感じられ(compareTo()
順序付けを提供し、同等性を比較しないことを意味します)、多少危険compareTo() == 0
でもあります(すべての場合において同等であることを意味するわけではないため、必ずしもそうであるとは限りませんString
)。
彼はfor のcompareTo()
代わりに使用するように教えられた理由を知りませんでした。また、理由もわかりませんでした。これは本当に個人的な好みの問題ですか、それともどちらの方法にも本当の理由がありますか?equals()
String
compareTo() == 0
必ずしもすべてのケースで平等を意味するわけではありません」。これは完全に正しいです!これは、Java API仕様(たとえば、Comparableクラスの仕様)で「consistent with equals」が意味することとまったく同じです。たとえば、Stringの比較メソッドは、equalsと整合性がありますが、BigDecimalの比較メソッドは、equals と整合性がありません。
.equalsIgnoreCase()
が、適切な場合は最速の比較.equals()
です。それ以外の場合は必要です。