两个对象的 hashCode()相同,则 equals()也一定为 true,对吗?

Posted 拾柴小斯

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了两个对象的 hashCode()相同,则 equals()也一定为 true,对吗?相关的知识,希望对你有一定的参考价值。

1.两个对象的 hashCode()相同,则 equals()也一定为 true,对吗?

不对,两个对象的 hashCode()相同,equals()不一定 true。

 

代码示例:

 

String str1 = "通话";
String str2 = "重地";
System.out.println(String.format("str1:%d | str2:%d", str1.hashCode(),str2.hashCode()));
System.out.println(str1.equals(str2));

 

 

执行的结果:

 

str1:1179395 | str2:1179395

 

false

 

代码解读:很显然“通话”和“重地”的 hashCode() 相同,然而 equals() 却为 false

因为在散列表中,hashCode()相等即两个键值对的哈希值相等,然而哈希值相等,并不一定能得出键值对相等。

以上是关于两个对象的 hashCode()相同,则 equals()也一定为 true,对吗?的主要内容,如果未能解决你的问题,请参考以下文章

java中两个对象值相同却可能有不同的hashcode对吗

两个对象的 hashCode()相同,则 equals()也一定为 true,对吗?

如果两个对象的哈希码相同则他们不一定相同,如果对象一致则哈希码一定相同

为什么重写equals时必须重写hashCode方法

两个对象值相同 (tmp1.equals(tmp2) == true) 但却可有不同的 HashCode 值,这句话有问题吗?

java中值相同,hashcode一定相同吗