hashCode()的作用是获取哈希码,也被称为列散码;
返回的就是一个int类型的整数,作用是确定改对象在哈希表中的索引位置。hashCode() 定义在JDK的Object.java中,这就意味着Java中的任何类都包含有hashCode() 函数。
同时重写hashCode()和equals()是最主要是因为如果两个对象的哈希值不同,那么也说明两个对象肯定不相同,如果哈希值相同,再使用equsla()方法比较对象的值,这样就节省了性能;
总结:
-
如果两个对象相等,则hashcode一定也是相同的
-
两个对象相等,对两个对象分别调用equals方法都返回true
-
两个对象有相同的hashcode值,它们也不一定是相等的
-
equals方法被覆盖过,则hashCode方法也必须被覆盖
-
hashCode()的默认行为是对堆上的对象产生独特值。如果没有重写hashCode(),则该class的两个对象无论如何都不会相等(即使这两个对象指向相同的数据)
为什么两个对象hashCode值相同,它们也不一样相等呢?
因为hashCode() 所使用的杂凑算法也许刚好会让多个对象传回相同的杂凑值。越糟糕的杂凑算法越容易碰撞,但这也与数据值域分布的特性有关(所谓碰撞也就是指的是不同的对象得到相同的 hashCode)。