の javadocObject.equals()
では、メソッドを正しくオーバーライドするために従う必要がある規則について説明しています。それは言います:
- これは再帰的です。null でない参照値 x に対して、x.equals(x) は true を返す必要があります。
- これは対称的です: null 以外の参照値 x および y について、y.equals(x) が true を返す場合に限り、x.equals(y) は true を返す必要があります。
- これは推移的です: null 以外の参照値 x、y、および z に対して、x.equals(y) が true を返し、y.equals(z) が true を返す場合、x.equals(z) は true を返す必要があります。
- 一貫性があります。null 以外の参照値 x および y に対して、x.equals(y) の複数の呼び出しは一貫して true を返すか、一貫して false を返します。ただし、オブジェクトの equals 比較で使用される情報が変更されていない場合に限ります。
- null 以外の参照値 x の場合、x.equals(null) は false を返す必要があります。
なぜこれらの規則に従う必要があるのかと誰かに尋ねられた場合equals()
、私が答えることができる唯一の答えは、「javadoc がそう言っているからです」です。私はそれに満足していません。これらのルールが存在する理由をより深く理解したいと思います。誰かがこれらのルールのそれぞれを調べて、違反した場合に何が問題になるかを例を挙げて説明できますか?