判断两个对象是否相等,为什么必须同时重写equals()和hashcode()方法

时间:2021-12-06 16:11:55

hashcode顾名思义是一个散列值码。

散列值,并不能表现其唯一性,但是具有离散性,其意义在于类似进行hashMap等操作时,加快对象比较的速度,进而加快对象搜索的速度。

hashcode和equals的关系

两个对象equals的时候,hashcode必须相等,但hashcode相等时,对象不一定equals。


在java中,equals和hashcode是有设计要求的,equals相等,则hashcode一定相等,反之则不然。

为什么会有这样的要求呢?

1、在集合中,比如HashSet中,要求放入的对象不能重复,怎么判定呢?

首先会调用hashcode,如果hashcode相等,则继续调用equals,如果equals也相等,则认为重复。

如果只重写了equals方法而没有重写hashcode方法,则hashcode就是继承Object的,返回内存编码,这时候可能出现equals相等,但是hashcode不等的情况。你的对象

使用集合时就会得不到你想要的结果。


最后明白两点就行了:

1、hashCode()方法存在的主要目的就是提高效率。

2、在集合中判断两个对象相等的条件,其实无论是往集合中存储数据,还是从集合中取数据,包括控制唯一性等,都是用这个条件判断的,条件如下:

首先判断两个对象的hashcode是否相等,如果不相等,就认为这两个对象不相等,就完成了。如果相等,才会判断两个对象的equals()方法是否相等,如果不相等,就认为

两个对象不相等,如果相等,那就认为这两个对象相等。