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

Posted 2220328171qq

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了两个对象值相同 (tmp1.equals(tmp2) == true) 但却可有不同的 HashCode 值,这句话有问题吗?相关的知识,希望对你有一定的参考价值。

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

答:

有问题,这句话是不对的。两个对象 tmp1 和 tmp2 满足 tmp1.equals(tmp2) == true 时它们的 HashCode 应当相同,因为 Java 对于 eqauls 方法和 hashCode 方法的规定是如果两个对象 equals 方法相等则它们的 hashCode 值一定要相同,如果两个对象的 hashCode 相同则它们的 equals 方法并不一定相同;实际中我们也可以不按照要求的原则去做,但是如果违背了上述原则就会发现在使用容器时相同的对象可以出现在 Set 集合中,同时增加新元素的效率会大大下降(对于使用哈希存储的系统,如果哈希码频繁的冲突将会造成存取性能急剧下降)。

以上是关于两个对象值相同 (tmp1.equals(tmp2) == true) 但却可有不同的 HashCode 值,这句话有问题吗?的主要内容,如果未能解决你的问题,请参考以下文章

javascript 数组对象根据相同属性值{key:value}合并两个对象

Linq 确保没有两个对象具有相同的属性值

对比两个对象的属性和值是否完全相同

反射比较两个对象属性名相同值不同

两个值相同的Integer对象的比较

两个对象值相同(x.equals(y) == true),但却可有不同的hashcode,这句话对不对?