hashCode()和equals()的关系

mac2026-09-30  4

hashCode()的作用是获取哈希码,也被称为列散码;

返回的就是一个int类型的整数,作用是确定改对象在哈希表中的索引位置。hashCode() 定义在JDK的Object.java中,这就意味着Java中的任何类都包含有hashCode() 函数。

同时重写hashCode()和equals()是最主要是因为如果两个对象的哈希值不同,那么也说明两个对象肯定不相同,如果哈希值相同,再使用equsla()方法比较对象的值,这样就节省了性能;

总结:

如果两个对象相等,则hashcode一定也是相同的

两个对象相等,对两个对象分别调用equals方法都返回true

两个对象有相同的hashcode值,它们也不一定是相等的

equals方法被覆盖过,则hashCode方法也必须被覆盖

hashCode()的默认行为是对堆上的对象产生独特值。如果没有重写hashCode(),则该class的两个对象无论如何都不会相等(即使这两个对象指向相同的数据)

为什么两个对象hashCode值相同,它们也不一样相等呢?

因为hashCode() 所使用的杂凑算法也许刚好会让多个对象传回相同的杂凑值。越糟糕的杂凑算法越容易碰撞,但这也与数据值域分布的特性有关(所谓碰撞也就是指的是不同的对象得到相同的 hashCode)。

最新回复(0)