もし私がequalsメソッドをオーバーライドしないで2つのインスタンスを比較すると、 私は期待される結果を得ますか?
いいえ、2つの異なるインスタンスを明示的に作成しているためです。
なぜですか?のデフォルトの実装は、2つの関係オブジェクトは、Java仮想メモリの同じメモリ位置を指しているかどうかをチェックする(このデフォルトの動作は、(java.lang.Object.equalsで定義されている))を等しく
Iが必要ですequalsメソッドとhashcodeメソッドをオーバーライドするには?あなたはjava.util.Mapの実装に
- キーとして懸念したクラスのインスタンスを使用する必要がある場合
最も一般的なプログラマは両方のequalsをオーバーライドするシナリオ()とhashCode()がある
java.util.Set実装の値
同じクラスの2つの異なるインスタンス間で値の等価性をチェックしたいとします(equals()を上書きすることは必須ですが、hashcode()は必須ではありませんが、 )
イコールとハッシュコードの一般的な契約は次のとおりです。
if a1.equals(a2)
it is mandatory that a1.hashcode() == a2.hashcode()
if a1.hashcode() == a2.hashcode()
it is not mandatory that a1.equals(a2)
私は一日:)
のために処理するのに十分なデータはこれが関連していることと思いますが、HTTPのない複製:// stackoverflowの.com/questions/27581/overriding-equals-and-hashcode-in-javaは、equalsとhasCodeをオーバーライドする方法* how *とオーバーライドするときの*ため*です。 – Raedwald
これはより良い複製であるようです:http://stackoverflow.com/questions/13387742 –