如何实现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
值,该值可以很好地表示对象的当前状态。 这是一个很好的例子。