hashcodeとequalsを書き換える注意事項

763 ワード

equalsを書き換えるときはjava言語仕様のequalsに対する要求を満たすことに注意する必要があります.
Java言語仕様equalsには、次のような機能が必要です.
  • 自己反転:任意の非空参照xについて、x.equals()trueを返すべきである.
  • 対称性:任意の参照xおよびyについて、y.equals(x)trueを返す場合にのみ、x.equals(y)trueを返すべきである.
  • 伝達性:x、y、zを参照する場合、x.equals(y)trueを返す場合、y.equals(z)も同様の結果を返す必要があります.
  • コンシステンシ:xとyが参照するオブジェクトが変更されていない場合、x.equals(y)を繰り返し呼び出すと、同じ結果が返されます.
  • 任意の非空参照xについて、x.equals(null)falseを返すべきである.

  • hashCodeを書き換える際の注意事項
    hashCodeメソッドを書き換える場合は、上記のコンシステンシ約定に加えて、以下の点に注意してください.
    (1)返されるhash値はint型であり,オーバーフローを防止する.
    (2)異なるオブジェクトが返すhash値はできるだけ異なるべきである.