首页 > 其他分享 >为什么重写equals还要重写hashcode方法

为什么重写equals还要重写hashcode方法

时间:2023-03-28 19:02:45浏览次数:24  
标签:相等 对象 equals hashcode 哈希 重写

首先需要明白什么时哈希函数:

哈希函数时一个特定的算法,将任意一个类型的对象转换成一串数字(无论对象的构造多么的复杂或者多么简单),转换完的数字就是这个对象的哈希值

在Object类中有一个叫做hashCode()的方法,可以获取到调用此方法的对象的哈希值(public native int hashCode();),Object类生成的哈希值的方法和调用者的内容无关,而是和对象的地址值有关,如果两个对象的地址值相同,那么这两个对象的哈希值一定相同

两个对象的地址值不同但是内容相同,假如只重写equals而不重写hashcode,由于默认的hashcode方法是根据对象的内存地址经哈希算法得来的,那么这两个对象的hashCode不一定相等

然而重写了equals,且对象1.equals(对象2)返回true,根据hashcode的规则,两个对象相等其哈希值一定相等,所以矛盾就产生了,因此重写equals一定要重写hashcode,重写后返回的新的哈希值与属性有关。

关于hashcode的一些规定:

两个对象相等,hashcode一定相等

两个对象不等,hashcode不一定不等

hashcode相等,两个对象不一定相等

hashcode不等,两个对象一定不等

标签:相等,对象,equals,hashcode,哈希,重写
From: https://blog.51cto.com/u_10956218/6155246

相关文章