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

作者:thisisnew 时间:2023-12-22 19:02:43 

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

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

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

选择2个属性进行生成

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

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

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

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

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

正确的应该如下

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

关于equals和hashcode问题

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

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

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

来源:https://blog.csdn.net/weu135/article/details/90234397

标签:idea,equals,hashcode
0
投稿

猜你喜欢

  • Java虚拟机之类加载

    2022-11-15 05:19:19
  • java数组元素的引用实例讲解

    2023-12-02 16:40:32
  • Android仿IOS自定义AlertDialog提示框

    2022-08-23 21:08:44
  • Android实现关机后数据不会丢失问题

    2021-06-08 18:54:47
  • java生成指定范围随机数的多种代码

    2023-04-28 07:51:15
  • 自定义类加载器以及打破双亲委派模型解析

    2023-06-22 22:03:59
  • Spring整合SpringMVC与Mybatis(SSM)实现完整登录功能流程详解

    2022-07-15 10:19:25
  • Java设计模式之迭代模式(Iterator模式)介绍

    2022-07-24 16:03:29
  • C#中事件只能在内部调用的原因分析

    2023-08-09 05:07:00
  • Java中的双重检查(Double-Check)详解

    2023-02-23 21:05:23
  • C语言字符串大小比较

    2022-06-02 14:15:17
  • Hibernate持久化对象生命周期原理解析

    2022-08-14 19:44:27
  • Java单例模式的几种常见写法

    2023-10-23 18:27:45
  • Component和Configuration注解区别实例详解

    2022-04-17 01:12:24
  • Spring Data JPA调用存储过程实例代码

    2023-11-25 00:13:15
  • C#表达式树Expression动态创建表达式

    2023-03-26 06:44:39
  • Android开发之删除项目缓存的方法

    2021-07-22 17:15:45
  • Android 和 windows C/C++/QT通讯时字节存储

    2022-07-16 06:09:02
  • Android仿微信雷达扫描效果的实现方法

    2022-07-28 01:49:17
  • C#实现单例模式的6种方法小结

    2023-09-13 21:02:57
  • asp之家 软件编程 m.aspxhome.com