Java中重写equals并重写hashcode方法的描述
Posted 一缕暖阳
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java中重写equals并重写hashcode方法的描述相关的知识,希望对你有一定的参考价值。
1.两个对象的hashCode()相同,equals()不一定为true
(1)重写equals()的同时,重写hashCode()
a.定义Person类,私有属性name,age;有参构造,set/get方法;
b.重写equals()、hashCode()方法
c.测试:
d.运行结果:
结论:
1.如果两个对象的hashcode值相等,有两种情况:
a.两个对象是同一个对象,执行equals()中if(this==o);
b.两个对象计算得出的hashcode值相同,发生了hash冲突。
综合代码示例得出:两个对象的hashCode()相等时,其equals()不一定相等(需注意hashcode的重写规则)。
2.如果两个对象的equals为true,则其hashcode值也必然相同
a.两个对象是同一个对象,使用==进行地址比较;
b.equals()中,return返回的是age属性的地址比较以及使用Objects类中的equals方法进行比较;
1)Objects类中的equals方法
2)Object类中的equals方法
可以得出,equals()中返回值的比较实际是进行地址比较,当equals()相等时,说明这两个对象是同一个对象,则其hashcode使用相同方法计算得出的值也相同。
综合示例得出: 如果两个对象的equals为true,则其hashcode值也必然相同。
对象的hashCode()计算:以Person类为例,其中age是int类型,其hashcode值就是其数值大小;name是String类型,其通过hash(name)进行计算。
以上是关于Java中重写equals并重写hashcode方法的描述的主要内容,如果未能解决你的问题,请参考以下文章
java 集合中重写hashCode方法和重写equals方法啥关系?
在java中,关于equals(),和hashCode()的重写问题。