对象引用和对象哈希码的区别

5
在Java中,对象的引用和相同对象的哈希码值有什么区别?

1
哈希码和对象的引用或地址之间的区别是什么?尽管最初是针对Java ME提出的,但它们是相同的。 - Matthew Flaschen
3个回答

10

它们是完全不同的概念。

Cat oldCat = new Cat();
Cat newCat = new Cat();
Cat oldCatRef = oldCat;

在上面的示例中,oldCatoldCatRef是指向同一对象的引用。因为它们引用同一对象,所以它们的哈希码将相等。
但是oldCatnewCat不引用同一对象。它们是指向两个不同对象的引用。但是基于它们的实现,它们可能具有相同的hashCodehashCode只是Object类中可以重写的方法。
编辑(来自PeterJ):根据JavaSE6 Object规范,如果oldCat.equals(newCat),则两者的哈希码应该相等。遵守这个契约是好的编程习惯。
你可能还想查看这个问题的答案:

哈希码和对象的引用或地址之间的区别是什么?


根据JavaSE6对象规范,如果oldCat.equals(newCat),那么两者的哈希码应该相等。遵守这个约定是良好的编程习惯。 - Shawn

7

一个对象的引用就是一个指向该对象的引用。

对象的哈希码是hashCode()方法的结果,具体取决于实现方式。默认的hashCode()

通常是通过将对象的内部地址转换为整数来实现的,但这种实现技术不是Java编程语言所必需的。


在64位JVM上,引用通常使用8字节,而hashCode()仅使用32位。 - Peter Lawrey

3

两个不同的对象可以具有相同的hashCode。一个reference是指向对象的唯一指针,其中hashCode是一个方便计算的属性。


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