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

5
当我浏览Object类时,我发现只有hashCode()方法的声明,那么它的实现在哪里呢?如果没有实现,hashCode()方法如何给我返回结果呢?这是否与Java中Object类的hash算法有关?

(Possible Duplicate:What’s the implementation of hashCode in java Object?

1
希望对问题进行踩的人,能否分享一个答案呢?谢谢。 - Nihal Sharma
4个回答

11

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

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

  • 0 - Park-Miller 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

请考虑静态内联get_next_hash()函数的源代码和注释。


很好知道...我不知道你是否也可以自定义这个。 - MoveFast
这对我来说似乎是真正的答案!! - TechSpellBound

7
< p > native 关键字表示它已经在本地代码(JVM)中实现。


谢谢,但是这个哈希码的值是如何被获取和返回的?能否请您提供一些见解! - Nihal Sharma
3
这将涉及查看JVM本身的代码,并了解JNI(Java Native Interface)方法实现如何绑定到它们的Java定义。我认为实际值在JVM实现之间并不一致。如果您需要依赖于实际值,请覆盖方法以符合您自己的需求。 - akaIDIOT
+1. 我认为没有关于哈希码实际值和计算方式的规范。但当然,它需要在内部与任何其他hashCode一样保持一致。 - Thilo

5

如果你查看hashcode声明

public native int hashCode();

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


0

实现部分在哪里?

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

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

但是,如果您创建自定义类型,则需要生成一个代表对象当前状态的良好int值。 这是一个很好的例子。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接