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

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

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

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

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

  • 0 – Park-Miller RNG(默认)
  • 1 – 地址和一些全局状态的function
  • 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()函数的源代码和注释。

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

如果你看到hashcode的声明

 public native int hashCode(); 

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

实施部分在哪里?

它已经由框架实现。 请参阅文档。

如果没有实现,hashCode()方法如何返回结果?

但是,如果创建自定义类型,则负责生成一个int值,该值可以很好地表示对象的当前状态。 这是一个很好的例子。