hashCode()的困境-Java
我有以下代码hashCode()的困境-Java,java,object,hashcode,Java,Object,Hashcode,我有以下代码 Object testA = new Object(); Object testB = testA; System.out.println("A:"+testA.hashCode()) System.out.println("B:"+testB.hashCode()) 根据上面的说明,我得到了两个对象的相同哈希代码。我知道testB被分配给testA,因此它可以有相同的hashcode,但是应该有一种方法来唯一地识别这两个对象中的差异,对吗 请让我知道,如果有什么明显的,我错过
Object testA = new Object();
Object testB = testA;
System.out.println("A:"+testA.hashCode())
System.out.println("B:"+testB.hashCode())
根据上面的说明,我得到了两个对象的相同哈希代码。我知道testB被分配给testA,因此它可以有相同的hashcode,但是应该有一种方法来唯一地识别这两个对象中的差异,对吗
请让我知道,如果有什么明显的,我错过了
但是,应该有一种方法来唯一地识别这两个对象的差异,对吗
没有区别,因为没有两个对象。只有一个对象由两个变量引用
理论上,两个不同的对象可能具有相同的
hashCode
。您可以使用equals
或使用=
来区分它们。如果不重写equals
,则默认情况下它的行为与=
相同。hashCode函数的含义是hashCode
必须为两个相等的对象返回相同的值。在这种情况下,它们不仅“相等”(根据equals
方法),甚至是同一个对象(这意味着它们相等)
此外,与规范要求无关,对
hashCode
的两个调用不可能返回不同的值,因为两个变量实际上引用的是同一个对象。无法区分testA
和testB
(当然除了变量名)。您创建了一个新的对象testA,但随后将testB分配给testA,这将为两个对象分配相同的内存空间。这就是它返回相同HashCode的原因。在检查==运算符时,它会说它是相等的。@Faz:HashCode的相关部分是equals
方法,而不是=
。但在这种情况下,两者都会说它们是相等的。你能添加一个对Java文档的引用吗?或者添加一个表示如果equals方法返回true,hashcode应该是相同的东西吗?@Abishemanoharan:添加了它。