Java中为什么重写equals方法Object类中的equals()方法问题?

确认一键查看最优答案

本功能為VIP专享,开通VIP获取答案速率将提升10倍哦!

请问为什么重写equals方法equals方法和为什么重写equals方法hashcode方法有没有必然的联系

比如我为什么重写equals方法了equals方法是否就一定要为什么重写equals方法hashcode方法,还是说根据自己的业务来决定是否为什么重写equals方法了equals方法就要为什么重写equals方法hashcode方法

这两个方法之間有没有必然的联系?

或者说他们之间什么关系也没有

就对象本身来说,这是两个独立的方法没有必然的联系。(可类比为你的姓名囷身份证号)

但是在一些算法里面,例如HashSet的set方法set是存储不重复记录的,在每个数据存入之前都会先检查数据是否存在。考虑到效率問题是先比较hashcode,hashcode不同就认为两个对象不同;如果相同,再比较equals确认是否相同。

就好比你要找一个人,先找这个名字名字不同就鈈是一个人,名字相同在比较身份证号。一个道理

hashcode用来计算一个对象的hash值,只是这个对象的一个附加属性可类比为姓名。

equals方法能明確判断两个对象是否相同好比身份证号。

Object的源码里equals方法说明有这样一段话:

当同类下的不同对象存在比较关系的时候最好为什么重写equals方法2个方法以保持对象关系的一致性

反过来说,不需要比较的时候就无所谓了

equals是判断对象里的属性是否相同决定对象是否同一对象

hashCode是判断對象的地址是否相同判断对象是否同一对象

既然对象的属性不同他们的存放地址肯定不同

就对象本身来说,这是两个独立的方法没有必然的联系。(可类比为你的姓名和身份证号)

但是在一些算法里面,例如HashSet的set方法set是存储不重复记录的,在每个数据存入之前都会先检查数据是否存在。考虑到效率问题是先比较hashcode,hashcode不同就认为两个对象不同;如果相同,再比较equals确认是否相同。


就好比你要找一個人,先找这个名字名字不同就不是一个人,名字相同在比较身份证号。一个道理
hashcode用来计算一个对象的hash值,只是这个对象的一个附加属性可类比为姓名。
equals方法能明确判断两个对象是否相同好比身份证号。

嗯这个身份证和名字比喻的通俗易懂

匿名用户不能发表回复!

如果不被为什么重写equals方法(原生)的hashCode和equals是什么样的

      在我们的业务系统中判断对象时有时候需要的不是一种严格意义上的相等,而是一种业务上的对象相等在这种情况丅,原生的equals方法就不能满足我们的需求了
      所以这个时候我们需要为什么重写equals方法equals方法来满足我们的业务系统上的需求。那么为什么在为什么重写equals方法equals方法的时候需要为什么重写equals方法hashCode方法呢

我要回帖

更多关于 为什么重写equals方法 的文章

 

随机推荐