1 | String str1 = new String("hello"); |
1 | false |
equals()反映的是对象或变量具体的值,即两个对象里面包含的值–可能是对象的引用,也可能是值类型的值。
hashCode()是根据内容计算出来
两个obj,如果equals()相等,hashCode()一定相等。
两个obj,如果hashCode()相等,equals()不一定相等(Hash散列值有冲突的情况,虽然概率很低)。
例子:
使用num%8的结果作为hashcode,那么当9%8=1,17%8=1,它们有相同的hash值,但是内容不一定相同。
结论:
因此判断两个对象是否是一个对象,先看hashcode,如果不同一定不相同;如果相同还要去看equal()的结果。也就是说,我们先通过 hashcode来判断两个类是否存放某个桶里,但这个桶里可能有很多类,那么我们就需要再通过 equals 来在这个桶里找到我们要的类。
那么,重写了equals(),为什么还要重写hashCode()呢?
想想,你要在一个桶里找东西,你必须先要找到这个桶啊,你不通过重写hashcode()来找到桶,光重写equals()有什么用啊