5

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

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

4

4 回答 4

11

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

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

  • 0 – Park-Miller RNG(默认)
  • 1 – 地址函数和一些全局状态
  • 2 – 常量 1
  • 3 – 顺序计数器
  • 4 – 对象的地址
  • 5 – 线程特定的异或移位

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

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

于 2013-01-25T12:32:27.853 回答
7

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

于 2013-01-25T12:25:32.483 回答
5

如果你看到声明hashcode

public native int hashCode();

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

于 2013-01-25T12:26:36.217 回答
0

执行部分在哪里?

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

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

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

于 2013-01-25T12:26:59.317 回答