java java方法的重写重写问题

请问重写equalsjava方法的重写和重写hashcodejava方法的重写有没有必然的联系

比如我重写了equalsjava方法的重写是否就一定要重写hashcodejava方法的重写,还是说根据自己的业务来决定是否重写了equalsjava方法的重写僦要重写hashcodejava方法的重写

这两个java方法的重写之间有没有必然的联系?

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

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

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

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

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

equalsjava方法的重写能明确判断两个对象是否相同好比身份证号。

Object的源码里equalsjava方法的重写说明有这樣一段话:

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

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

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

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

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

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

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


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

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

匿名用户不能发表回复!
}

我要回帖

更多关于 java方法的重写 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信