解决idea默认带的equals和hashcode引起的bug
idea默认带的equals和hashcode引起的bug
最近因规范需要,统一使用idea,使用的版本为2017.4.
建立一个实体类,在添加的时候,使用idea的快捷键自动生成了equals和hashcode方法.
选择2个属性进行生成


然后往list中添加,结果一直出现重复记录,调试半天发现
if(!super.equals(o)) return false;这一句是进行引用比较,如果同一个类,直接返回,导致出现问题。
按理说我选择属性进行比对,肯定是不可能是相同引用了,所以2017.3.4分版本的自动生成equals和hashcode请慎
正确的应该如下

关于equals和hashcode问题
默认情况下也就是从超类Object继承而来的equals方法与‘=='是完全等价的,比较的都是对象的内存地址,但我们可以重写equals方法,使其按照我们的需求的方式进行比较,如String类重写了equals方法,使其比较的是字符的序列,而不再是内存地址。
hashcode是用于散列数据的快速存取,如利用HashSet/HashMap/Hashtable类来存储数据时,都是根据存储对象的hashcode值来进行判断是否相同的。
这样如果我们对一个对象重写了euqals,意思是只要对象的成员变量值都相等那么euqals就等于true,但不重hashcode,那么我们再new一个新的对象,当原对象.equals(新对象)等于true时,两者的hashcode却是不一样的,由此将产生了理解的不一致,如在存储散列集合时(如Set类),将会存储了两个值一样的对象。
栏 目:JAVA代码
下一篇:简单验证码生成Java版
本文标题:解决idea默认带的equals和hashcode引起的bug
本文地址:http://www.codeinn.net/misctech/198131.html


阅读排行
- 1Java Swing组件BoxLayout布局用法示例
- 2java中-jar 与nohup的对比
- 3Java邮件发送程序(可以同时发给多个地址、可以带附件)
- 4Caused by: java.lang.ClassNotFoundException: org.objectweb.asm.Type异常
- 5Java中自定义异常详解及实例代码
- 6深入理解Java中的克隆
- 7java读取excel文件的两种方法
- 8解析SpringSecurity+JWT认证流程实现
- 9spring boot里增加表单验证hibernate-validator并在freemarker模板里显示错误信息(推荐)
- 10深入解析java虚拟机




