equals默认比较的是对线的地址,当然可以重写,比如string类比较的是值
hashcode他获取的是哈希码,也称散列码,他实际返回的是一个int类型的整数,哈希码的作用就是确定该对象在哈希表中的位置,java任何对象都有hashcode函数,它是以key-value的方式存储在散列表中,特点就是能够快速查出索引对应的值
为什么要有hashcode?
就拿hashset如何检查是否为重复元素为例
对象加入hashset时会调用hashcode方法来检查这个位置是否有值,如果没有,那直接加入,如果有值的话,他就会调用equals方法,来比较其中的其中,如不不能的话让他进行操作,哈希冲突后就是掉用equals方法,为什么不直接用equals方法的原因equals要地址一个一个比较其中的地址,大大消耗了其中的性能
如果两个对象相等,那个hashcode也一定相等
如果两个对象相等,那么equals返回的一定是true
如果两个对象的哈希码相同,他们不一定是同一个对象
所以,equals覆盖过,hashcode也要覆盖