我有以下代码:
Object testA = new Object();
Object testB = testA;
System.out.println("A:"+testA.hashCode())
System.out.println("B:"+testB.hashCode())
根据上述内容,我得到了两个对象相同的哈希码。我理解testB被赋予了testA,因此它可以具有相同的哈希码,但是应该有一种方式可以唯一地区别这两个不同的对象,对吧?
如果有明显遗漏的地方,请告诉我!
然而,应该有一种方法可以唯一地识别这两个对象的区别,对吧?
实际上没有区别,因为这里只有一个对象被两个变量引用。
理论上,两个不同的对象可能具有相同的hashCode
。您可以通过使用equals
或==
来区分它们。如果您没有覆盖equals
,默认情况下它会像==
一样运行。
hashCode
函数必须与equals
方法兼容,也就是说,对于两个相等的对象,hashCode
函数必须返回相同的值。在这种情况下,它们不仅“相等”(根据equals
方法),甚至是同一个对象(这意味着它们是相等的)。hashCode
都不可能返回不同的值,因为两个变量实际上引用同一个对象。除了变量名之外,没有办法区分testA
和testB
。
hashCode
相关的部分是equals
方法,而不是==
。但在这种情况下,两者都会 表示它们相等。 - mastov