大白话告诉你为什么重写equals方法必须重写hashcode方法
首先我们知道原始的equals()方法和==比较是相等的,对于对象都是比较内存地址。原始的hashcode()方法根据对象的内存地址生成哈希码。
由于不同的hashcode值(即哈希码)不同,则equals()方法调用时肯定不相等,而相同的hashcode值相同,不代表equals()方法调用时相等。所以hashcode值是利用equals()方法判断的先决条件,如果hashcode值不同,则不用比较equals()方法,因为equals()方法得到值肯定不相等。
因此如果我们重写equals()方法想比较对象内容是否相等,这时就要重写hashcode()方法了。因为如果不改的话,hashcode()方法根据对象的内存地址生成哈希码,这时判断两个不同对象肯定是不相等的,但是他们内容可能相等,所以需要重写hashcode()方法。