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

时间:2013-01-25 12:23:28

标签: java object hashcode

  

可能重复:
  What’s the implementation of hashCode in java Object?

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

4 个答案:

答案 0 :(得分:10)

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

  

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

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

答案 1 :(得分:7)

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

答案 2 :(得分:5)

如果您看到hashcode的{​​{3}}

public native int hashCode();
声明中的

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

答案 3 :(得分:0)

  

实施部分在哪里?

它已经由框架实现。 Please see the documentation.

  

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

但是,如果您创建自定义类型,则您负责生成int值,该值可以很好地表示对象的当前状态。 Here is a good example of that.