hashcodeとequalsを書き換える注意事項
763 ワード
equalsを書き換えるときはjava言語仕様のequalsに対する要求を満たすことに注意する必要があります.
Java言語仕様自己反転:任意の非空参照xについて、 対称性:任意の参照xおよびyについて、 伝達性:x、y、zを参照する場合、 コンシステンシ:xとyが参照するオブジェクトが変更されていない場合、 任意の非空参照xについて、
hashCodeを書き換える際の注意事項
hashCodeメソッドを書き換える場合は、上記のコンシステンシ約定に加えて、以下の点に注意してください.
(1)返されるhash値はint型であり,オーバーフローを防止する.
(2)異なるオブジェクトが返すhash値はできるだけ異なるべきである.
Java言語仕様
equals
には、次のような機能が必要です.x.equals()
はtrue
を返すべきである.y.equals(x)
がtrue
を返す場合にのみ、x.equals(y)
もtrue
を返すべきである.x.equals(y)
がtrue
を返す場合、y.equals(z)
も同様の結果を返す必要があります.x.equals(y)
を繰り返し呼び出すと、同じ結果が返されます.x.equals(null)
はfalse
を返すべきである.hashCodeを書き換える際の注意事項
hashCodeメソッドを書き換える場合は、上記のコンシステンシ約定に加えて、以下の点に注意してください.
(1)返されるhash値はint型であり,オーバーフローを防止する.
(2)異なるオブジェクトが返すhash値はできるだけ異なるべきである.