要約:
ハッシュコードと同じ一見小さな役割のそれに等しいが、それは非常に異なる製品を持って、私は異なる測定基準を持っている値を比較しています。私はより良いアプリケーションバーを提供するために、我々はルールに合意した提案します
ので、2つの結論があります。
1、2つのオブジェクトが自分のhashCodeは確かに等しい等しい等しく、それは絶対に信頼性があると等しいです。
図2に示すように、2つのオブジェクトがその等号が必ずしも等しくない等しいハッシュコードであり、ハッシュコードは絶対確実ではありません。
ハッシュコードとは何ですか(ハッシュコード)
パブリッククラスデモ{ パブリック静的無効メイン(文字列[] args){ 文字列str =「AA」。 System.out、のprintln(str.hashCode()) } } //结果为 3104
等号は何ですか
2つのオブジェクトが「==」、すなわち、等しいかどうかを決定する2つのオブジェクトのアドレスは同じであり、オブジェクトに等しい()メソッドをオーバーライドする場合、オブジェクトの内容が等しい比較です。Javaはどのクラスのequalsメソッドを持っている、でjava.Objectで対等同じ定義。
図は、メソッドのオーバーライドが等しくされていない()の
それ以来、2つの偶数自分の名前などの異なるアドレス、異なる結果のハッシュコードのオブジェクトが、「==」と「に等しい()が」偽を返す、等しくありません。
我々はそれが同じであると考えられている2つのネームシステム等しいときにメソッドが返すtrueまたは「==」、つまり、2つのオブジェクトをしたい場合は、等しいメソッド呼び出しをオーバーライドする必要があります)(等しいです。そして、多くの状況では、我々は2つが同じ名前でないと判断し、そのようなアドレスなど、追加の情報を決定するために必要とされていません。どのようにそれを書き換えるには?
オーバーライドのequals()メソッドには、いくつかの条件を満たしている必要があります
- 再帰:任意の非ヌル参照xについてについて、x.equals(x)がtrueを返します。
- 対称性:xおよびyについて、x.equals(y)は、任意の参照のためにtrueを返し、y.equals(x)はtrueに返す必要があります。
- 推移は:x.equals(y)がtrueを返す場合のx、yおよびzへの参照のために、y.equals(z)がtrueを返し、その後、x.equals(z)がtrueを返すべきです。
- 一貫性:オブジェクトは、xによって参照およびYは変更されない場合、結果は同じにして得られた繰り返しx.equals(Y)と呼ばれています。
- Nonemptiness:任意の非ヌル参照のX、結果x.equals(ヌル)が偽です。
オーバーライドメソッドは、その後、アドレス値に等しい対等性を確保するような条件に等しいを持っているので、hashCodeメソッドがtrueを返すオーバーライドする必要があります等しいです