我有以下代码,
Object testA = new Object();
Object testB = testA;
System.out.println("A:"+testA.hashCode())
System.out.println("B:"+testB.hashCode())
根据上面的内容,我得到了两个对象的相同哈希码。我知道testB被分配了testA,所以它可以有相同的哈希码,但是应该有一种方法可以唯一地识别这两个对象的差异吗?
如果有遗漏的东西,请告诉我!
答案 0 :(得分:7)
然而,应该有一种方法可以唯一地识别这两个对象的差异吗?
没有区别,因为没有两个对象。只有一个对象由两个变量引用。
理论上,两个不同的对象可能具有相同的hashCode
。您可以使用equals
或使用==
将其区分开来。如果您未覆盖equals
,则默认情况下其行为为==
。
答案 1 :(得分:4)
hashCode
函数has to be compatible with the equals
method,hashCode
必须为2个相等的对象返回相同的值。在这种情况下,它们不仅“相等”(根据equals
方法),甚至相同的对象(这意味着它们是相同的)。
此外,无论规范要求如何,对hashCode
的2次调用都不可能返回不同的值,因为这两个变量实际上都引用了同一个对象。没有办法区分testA
和testB
(当然除了变量名称)。
答案 2 :(得分:1)
您创建一个新对象testA,然后将testB分配给testA,它为两个对象分配相同的内存空间。这就是为什么它返回相同的HashCode。