hashCode()的困境 - Java

时间:2015-06-24 09:10:12

标签: java object hashcode

我有以下代码,

Object testA =  new Object();
Object testB = testA;
System.out.println("A:"+testA.hashCode())
System.out.println("B:"+testB.hashCode())

根据上面的内容,我得到了两个对象的相同哈希码。我知道testB被分配了testA,所以它可以有相同的哈希码,但是应该有一种方法可以唯一地识别这两个对象的差异吗?

如果有遗漏的东西,请告诉我!

3 个答案:

答案 0 :(得分:7)

  

然而,应该有一种方法可以唯一地识别这两个对象的差异吗?

没有区别,因为没有两个对象。只有一个对象由两个变量引用。

理论上,两个不同的对象可能具有相同的hashCode。您可以使用equals或使用==将其区分开来。如果您未覆盖equals,则默认情况下其行为为==

答案 1 :(得分:4)

hashCode函数has to be compatible with the equals methodhashCode必须为2个相等的对象返回相同的值。在这种情况下,它们不仅“相等”(根据equals方法),甚至相同的对象(这意味着它们是相同的)。

此外,无论规范要求如何,对hashCode的2次调用都不可能返回不同的值,因为这两个变量实际上都引用了同一个对象。没有办法区分testAtestB(当然除了变量名称)。

答案 2 :(得分:1)

您创建一个新对象testA,然后将testB分配给testA,它为两个对象分配相同的内存空间。这就是为什么它返回相同的HashCode。