料AboutJavaScriptを有効にして、ご利用ください。Object.hashCode()メソッドもオーバーライドしなくてはならない。java.lang.Objectクラスでは、equalsメソッドを使って等価であると評価される2つのオブジェクトはすべて、hashCode()メソッドの呼び出し結果が同じ整数値になることを要求している。2006]equals()メソッドはオブジェクト同士の論理的等価性を評価するために用いられる。したがって、等価なオブジェクトにhashCode()メソッドを適用した結果は同じ値でなければならない。この契約に従わない実装を行うと、プログラムの欠陥になる。違反コード以下の違反コードでは、HashMapを使ってクレジットカード番号と文字列を関連づけ、続いてクレジットカード番号に関連づけられた文字列を取得しようとしている。取得される値は4111111111111111であるはずが、実際にはnullが取得される。}}このように間違った動作をする原因は、CreditCardクラスではequalsメソッドをオーバーライドしているが、hashCodeメソッドをオーバーライドしていないからである。したがって、デフォルトのhashCodeメソッドが使われ、オブジェクトが論理的には同一であっても異なる値を返してしまう。このため、異なるハッシュバケツを参照してしまい、get()メソッドは意図した値を見つけることができない。センシティブな情報をハードコードしない」にも違反している。hashCode()もオーバーライドしており、equals()メソッドが同一であると見なすインスタンスに対して同一の値を生成することを保証している。このようなハッシュ関数の実装方法について詳細に検討している。}}リスク評価hashCodeメソッドをオーバーライドせずにequalsメソッドをオーバーライドすると、予期せぬ結果をもたらす。L3自動検出equals()メソッドとhashCode()メソッドのいずれか一方のみをオーバーライドしているクラスの検出は容易であるが、これらのメソッドが相互に一貫性を持つかどうかを判別するのは一般に困難である。ヒューリスティックな手法が役に立つ可能性はある。equals翻訳元これは以下のページを翻訳したものです。有このページは役に立ちましたか?javascriptを有効にすると、ご回答いただけます。その他のご意見はPCサイトにて入力願います。