解决idea默认带的equals和hashcode引起的bug
作者:thisisnew 发布时间:2023-12-22 19:02:43
标签:idea,equals,hashcode
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类),将会存储了两个值一样的对象。
来源:https://blog.csdn.net/weu135/article/details/90234397


猜你喜欢
- ArrrayList是Java中经常被用到的集合,弄清楚它的底层实现,有利于我们更好地使用它。下图是ArrayList的UML图从图中我们可
- 一、Lombok从上一篇博客可看出,DAO接口类的编写变得简单,反过来看模型,编写还需要(私有属性、setter...getter...方法
- 经典的排序算法有八种,分别为:冒泡排序选择排序插入排序归并排序希尔排序快速排序堆排序基数排序其中冒泡排序、选择排序、插入排序称为三大基本排序
- 通过spring注解开发,测试单例和多例区别1.注解和配置两种用法形式配置版:注解版:2.在spring框架中,scope作用域默认是单例的
- 冒泡排序在八大排序中,冒泡排序是最为出名的排序算法之一!冒泡排序的代码还是相当简单的,两层循环,外层是冒泡轮数,里层是依次比较,这个算法的时
- 一、定义责任链模式(Chain of Responsibility Pattern):避免将一个请求的发送者与接受者耦合在一起,让多个对象都
- 一.本地Nacos安装环境: Win7 ,JDK8 ,maven3.51.下载安装包2.启动nacos服务,bin文件下下面startup.
- 一、效果图 二、实现思路1.界面上可以点开的各种实际都是按钮,创建9行9列的二维数组,然后
- android去掉滑动到顶部和底部的阴影<ListViewandroid:id="@+id/listView"an
- 在Spring 5 Webflux中,配置CORS,可以通过自定义WebFilter实现:注:此种写法需真实跨域访问,监控header中才会
- 产生私钥和公钥System.Security.Cryptography.RSACryptoServiceProvider myrsa = n
- 前言在学习springboot 之后想结合着html做个小demo,无奈一直没掌握窍门,在多番的搜索和尝试下终于找到了配置的方法,使用thy
- 1. mybatis-plus开启二级缓存spring: datasource: type: com.alibaba.druid
- hello,今天给大家带来一道算法题。这道算法题,是我目前为止,见过最难的一道题。那么到底是怎样的一道算法题呢?如下:题目:给定一个数组,
- 前言前两篇我们详细了解了 findById 和 findAll 以及 findAll 的分页查询,如果说JPA只有上面的两种查询功能,那就太
- 通用配置#下面介绍的整合JDBC和整合MyBatis都需要添加的实体类和配置数据库表#CREATE TABLE `user` ( `id`
- using System;using System.Collections.Generic;using System.Globalizati
- 一、搭建 mvc 环境新建一个 module 模块,创建 maven 工程,步骤跟以前一样,各种配置文件内容也可以拷贝修改一下即可。二、创建
- 项目里头需要做一个判断用户输入的号码是否是正确的手机号码,正确的手机号码应该是11位的,这里我们需要用一个正则表达式来进行判断,
- 工作中因业务需求,将数据库中的树状结构的数据根据父节点获取所有的子节点实现思路1.获取整个数据的list集合数据2.将数据分组,java8