尽管两个不同的对象可能具有相同的哈希码,但是System.identityHashCode()
似乎返回对象的内存指针。我猜在32位JVM实现中(包括Sun JDK、Open JDK),可能没有例外情况。虽然我没有检查过源代码。在实践中,我可以假设具有相同System.identityHashCode()
的两个对象是相同的吗?
尽管两个不同的对象可能具有相同的哈希码,但是System.identityHashCode()
似乎返回对象的内存指针。我猜在32位JVM实现中(包括Sun JDK、Open JDK),可能没有例外情况。虽然我没有检查过源代码。在实践中,我可以假设具有相同System.identityHashCode()
的两个对象是相同的吗?
而对于对于给定对象,只要该对象的类没有覆盖hashCode()方法,就会返回与默认方法hashCode()返回的相同的哈希码。空引用的哈希码为零。
Object.hashCode()
,
然而,Sun JDK中存在一个错误,表明两个对象可能返回相同的哈希码。在合理的范围内,Object类定义的hashCode方法确实为不同的对象返回不同的整数。(通常通过将对象的内部地址转换为整数来实现,但这种实现技术不是JavaTM编程语言所必需的。)
你的问题只有两个方面:
System.identityHashCode(Object)
返回什么。
返回给定对象的哈希码,与默认方法hashCode()返回的哈希码相同,无论给定对象的类是否覆盖了hashCode()。 null引用的哈希码为零。
比较两个对象的相等性时哈希码规则是什么。
合同规定,如果两个对象使用equals(object)方法相等,则它们应该具有相同的哈希码,但如果两个对象具有相同的哈希码,则它们不一定相等。
==
来比较它们,它确实表示它们是相同的。 - Greg Kopff