解决idea默认带的equals和hashcode引起的bug

网友投稿 818 2022-12-24

解决idea默认带的equals和hashcode引起的bug

解决idea默认带的equals和hashcode引起的bug

idea默认带的equals和hashcode引起的bug

最近因规范需要,统一使用idea,使用的版本为2017.4.

建立一个实体类,在添加的时候,使用idea的快捷键自动生成了equals和hashcode方法.

选择2个属性进行生成

然后往list中添加,结果一直出现重复记录,调试半天发现

if(!super.equxmAJKbDals(o)) return falsxmAJKbDe;这一句是进行引用比较,如果同一个类,直接返回,导致出现问题。

按理说我选择属性进行比对,肯定是不可能是相同引用了,所以2017.3.4分版本的自动生成equals和hashcode请慎

正确的应该如下

关于equals和hashcode问题

默认情况下也就是从超类Object继http://承而来的equals方法与‘=='是完全等价的,比较的都是对象的内存地址,但我们可以重写equals方法,使其按照我们的需求的方式进行比较,如String类重写了equals方法,使其比较的是字符的序列,而不再是内存地址。

hashcode是用于散列数据的快速存取,如利用HashSet/HashMap/Hashtable类来存储数据时,都是根据存储对象的hashcode值来进行判断是否相同的。

这样如果我们对一个对象重写了euqals,意思是只要对象的成员变量值都相等那么euqals就等于true,但不重hashcode,那么我们再new一个新的对象,当原对象.equals(新对象)等于true时,两者的hashcode却是不一样的,由此将产生了理解的不一致,如在存储散列集合时(如Set类),将会存储了两个值一样的对象。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:flutter 直播推流(flutter直播app开发教程)
下一篇:智能车载终端说明书(智能控制终端说明书)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~