关于重写equals必须重写hashcode的理解
1.equals()和hashcode()这两个方法都是从object类中继承过来的
2.equals()是对两个对象的地址值进行的比较(即比较引用是否相同),hashCode()是一个本地方法,是根据内存地址+哈希算法得出的hash码。
对于equls和hashcode的关系定义:
java.lnag.Object中对hashCode的约定:
- 在一个应用程序执行期间,如果一个对象的equals方法做比较所用到的信息没有被修改的话,则对该对象调用hashCode方法多次,它必须始终如一地返回同一个整数。
- 如果两个对象根据equals(Object o)方法是相等的,则调用这两个对象中任一对象的hashCode方法必须产生相同的整数结果。
- 如果两个对象根据equals(Object o)方法是不相等的,则调用这两个对象中任一个对象的hashCode方法,不要求产生不同的整数结果。但如果能不同,则可能提高散列表的性能。
可以得出结论:
重写equals 两个对象相等 hashcode一定相等 【重写equals比较的是对象的值,对象的内存地址不同,hashcode是根据内存地址+哈希算法得出的hash码】