如何实现Object类中的hashCode()方法?

Nih*_*rma 5 java object hashcode

可能重复:
java Object中hashCode的实现是什么?

当我浏览Object类时,我发现只有hashCode()方法的声明.实施部分在哪里?如果没有实现,hashCode()方法如何返回结果?

And*_*nov 10

它是在本机代码中实现的.至于实现,它有点棘手 - 你可以改变默认实现.如果查看"Open JDK"源,您将看到以下选项:

-XX:hashCode = n(从0到5).

  • 0 - Park-Miller RNG(默认)
  • 1 - 地址和一些全局状态的功能
  • 2 - const 1
  • 3 - 顺序计数器
  • 4 - 对象的地址
  • 5 - 特定于线程的xor-shift

你可以在这里找到一个详细的implmenetation:http://hg.openjdk.java.net/jdk7/jdk7/hotspot/file/tip/src/share/vm/runtime/synchronizer.cpp

考虑static inline intptr_t get_next_hash()函数的源代码和注释.


aka*_*IOT 7

native关键字表示它已在本机代码(JVM)中实现.

  • 这将涉及查看JVM本身的代码并了解如何将JNI(Java Native Interface)方法实现绑定到其Java定义.我相信JVM的实现之间的实际值并不一致.如果您需要依赖实际值,请覆盖该方法以符合您自己的需要. (3认同)

Mov*_*ast 5

如果您看到声明hashcode

public native int hashCode();
Run Code Online (Sandbox Code Playgroud)

native 声明中表示它是在jvm代码中本机实现的.