5

重複の可能性:
JavaオブジェクトでのhashCodeの実装は何ですか?

Objectクラスを参照しているときに、hashCode()メソッドの宣言しかないことがわかりました。実装部分はどこにありますか?実装がない場合、hashCode()メソッドはどのように結果を返しますか?

4

4 に答える 4

11

ネイティブコードで実装されています。実装に関しては、もう少し注意が必要です。デフォルトの実装を変更できます。「Open JDK」ソースを見ると、次のオプションが表示されます。

-XX:hashCode=n (0 から 5)。

  • 0 – パークミラー RNG (デフォルト)
  • 1 – アドレスの機能といくつかのグローバル状態
  • 2 – 定数 1
  • 3 – 順次カウンター
  • 4 – オブジェクトのアドレス
  • 5 – スレッド固有の xor-shift

ここで詳細な実装を見つけることができます: http://hg.openjdk.java.net/jdk7/jdk7/hotspot/file/tip/src/share/vm/runtime/synchronizer.cpp

ソースコードとstatic inline intptr_t get_next_hash()関数のコメントを検討してください。

于 2013-01-25T12:32:27.853 に答える
7

このnativeキーワードは、ネイティブ コード (JVM) で実装されていることを示します。

于 2013-01-25T12:25:32.483 に答える
5

の宣言を見たらhashcode

public native int hashCode();

nativein 宣言は、jvm コードでネイティブに実装されていることを示します。

于 2013-01-25T12:26:36.217 に答える
0

実装部分はどこですか?

すでにフレームワークによって実装されています。ドキュメントを参照してください。

実装がない場合、hashCode() メソッドはどのように結果を返しますか?

ただし、カスタム タイプを作成する場合intは、オブジェクトの現在の状態を適切に表す値を生成する必要があります。これがその良い例です。

于 2013-01-25T12:26:59.317 に答える