1

equals()クラスのメソッドとメソッドをオーバーライドする場合hashCode()、次のアプローチは機能しますか?

オブジェクトが等しいかどうかを確認するすべてのロジックは、equals()メソッドで実行されます。このクラスには、1 に設定された静的変数 ( と呼びますhashCodeReturn) があります。

equals メソッドが false を返すロジックに達するたびに、に 1 を追加します。hashCodeReturn

thenはhashCode()単にhashCodeReturn値を返します

これが機能しない理由はありますか?

どうもありがとう。

4

2 に答える 2

10

いいえ、うまくいきません。

同じ (たとえば、同じ参照) である 2 つのオブジェクトのハッシュ コードは同じである必要があります。静的変数の結果を返すと、この契約が破られます。

hashCode の一般的な契約は次のとおりです。

Java アプリケーションの実行中に同じオブジェクトに対して複数回呼び出された場合は常に、オブジェクトの equals 比較で使用される情報が変更されていない限り、hashCode メソッドは一貫して同じ整数を返す必要があります。

于 2013-01-11T09:24:00.130 に答える
0

Hashcode()同じ参照でvalue呼び出されたときに同じ値を返す必要がありますが、以前に呼び出されたときに変更された可能性がある値を返す場合、それはクラスの変数であり、その値とは無関係にデクリメントおよびインクリメントされる可能性があり、次の呼び出し時に変更される可能性があるためです。の。objectstaticobjecthashcode()

于 2013-01-11T09:39:25.723 に答える