尽管两个不同的对象可能具有相同的哈希码,但是,System.identityHashCode()
似乎返回了对象的内存指针。我想 32 位 JVM 实现也不例外,包括 Sun JDK、Open JDK。不过,我没有检查源代码。在实践中,我可以假设两个相同的对象System.identityHashCode()
是相同的吗?
问问题
1239 次
3 回答
7
答案是不。
System.identityHashCode()只返回Object.hashCode()。
为给定对象返回与默认方法 hashCode() 返回的相同的哈希码,无论给定对象的类是否覆盖 hashCode()。空引用的哈希码为零。
而对于Object.hashCode()
在合理可行的情况下,由 Object 类定义的 hashCode 方法确实为不同的对象返回不同的整数。(这通常通过将对象的内部地址转换为整数来实现,但 JavaTM 编程语言不需要这种实现技术。)
但是,Sun JDK 中存在一个错误,表明两个对象可以返回相同的哈希码。
于 2012-05-18T01:22:48.117 回答
1
你的问题只有两点:
返回什么
System.identityHashCode(Object)
。为给定对象返回与默认方法 hashCode() 返回的相同的哈希码,无论给定对象的类是否覆盖 hashCode()。空引用的哈希码为零。
比较两个对象的相等性时,哈希码规则是什么。
合同说,如果两个对象使用 equals(object) 方法相等,那么它们应该具有相同的哈希码,但如果两个对象具有相同的哈希码,它们不一定相等。
于 2012-05-18T01:31:14.297 回答