【问题标题】:How hashCode() method in Object class is implemented? [duplicate]Object 类中的 hashCode() 方法是如何实现的? [复制]
【发布时间】:2013-01-25 12:23:27
【问题描述】:

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

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

【问题讨论】:

  • 希望对问题投反对票的人,请注意分享答案。谢谢

标签: java object hashcode


【解决方案1】:

它是在本机代码中实现的。至于实现,它有点棘手 - 您可以更改默认实现。如果您查看“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()函数的源代码和cmets。

【讨论】:

  • 很高兴知道...不知道您是否也可以自定义。
  • 在我看来这才是真正的答案!!
【解决方案2】:

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

【讨论】:

  • 谢谢,但是如何以及由谁获取此哈希码值以及如何返回?请有一点见解!
  • 这将涉及查看 JVM 本身的代码并了解方法的 JNI(Java 本地接口)实现如何绑定到它们的 Java 定义。我相信 JVM 的实现之间的实际值并不一致。如果需要依赖实际值,重写方法以符合自己的需要。
  • +1。而且我认为没有关于哈希码的实际值及其计算方式的规范。 (当然,它需要像任何其他 hashCode 一样在内部保持一致)。
【解决方案3】:

如果您看到hashcodedeclaration

public native int hashCode();

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

【讨论】:

    【解决方案4】:

    实现部分在哪里?

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

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

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

    【讨论】:

      猜你喜欢
      • 2012-11-16
      • 2012-11-26
      • 1970-01-01
      • 1970-01-01
      • 2012-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多