解决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类),将会存储了两个值一样的对象。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。
相关推荐
-
如何在IDEA中对 hashCode()和 equals() 利用快捷键快速进行方法重写
在Java中对集合进行操作时,有时候需要对类中的equals() 和 hashCode()进行方法重写.IDEA中实现了利用快捷键即可对上述内容进行快速操作.如下,我们定义一个名为Student的类. 下面我们利用快捷键对equals() 和 hashCode()方法进行重写 按住alt+Inset键会出现下面一个弹框 接着进行如下操作 IDEA自动生成了下面的方法 这样就完成了hashCode()和 equals() 方法的简单重写. 另外补充一句,HashSet集合保证元素的唯一性依赖两个方
-
详解hashCode()和equals()的本质区别和联系
在学习java,根据视频做实例的过程中,对equals和hashcode两个方法理解稍微深刻一点,主要是它们两个很容易混淆,容易出错,自己又通过网上的资料学习,和大家分享 equals()方法 equals是Object类提供的方法之一,众所周知,每一个java类都继承自Object类,所以说每一个对象都有equals这个方法.而我们在用这个方法时却一般都重写这个方法,why? 先看一个Object类中equals()方法的源代码: public boolean equals(Object ob
-
java中hashCode方法与equals方法的用法总结
首先,想要明白hashCode的作用,必须要先知道Java中的集合. 总的来说,Java中的集合(Collection)有两类,一类是List,再有一类是Set. 前者集合内的元素是有序的,元素可以重复:后者元素无序,但元素不可重复. 那么这里就有一个比较严重的问题了:要想保证元素不重复,可两个元素是否重复应该依据什么来判断呢? 这就是Object.equals方法了.但是,如果每增加一个元素就检查一次,那么当元素很多时,后添加到集合中的元素比较的次数就非常多了. 也就是说,如果集合中现在已经有
-
浅谈String类型等值比较引起的“==”、“equals()”和“hashCode”思考
关于String类型的等值比较和内容比较,是学习java甚至任何编程语言所共同的常见问题,理解String类型的等值比较和内容比较也是面试经常问到的问题. String类型的等值比较和内容比较 字符串等值比较 public final class String implements java.io.Serializable, Comparable<String>, CharSequence { /** The value is used for character storage. */ pr
-
Java equals 方法与hashcode 方法的深入解析
PS:本文使用jdk1.7解析1.Object类 的equals 方法 复制代码 代码如下: /** * Indicates whether some other object is "equal to" this one. * <p> * The {@code equals} method implements an equivalence relation * on non-null object references: * &l
-
解决idea默认带的equals和hashcode引起的bug
idea默认带的equals和hashcode引起的bug 最近因规范需要,统一使用idea,使用的版本为2017.4. 建立一个实体类,在添加的时候,使用idea的快捷键自动生成了equals和hashcode方法. 选择2个属性进行生成 然后往list中添加,结果一直出现重复记录,调试半天发现 if(!super.equals(o)) return false:这一句是进行引用比较,如果同一个类,直接返回,导致出现问题. 按理说我选择属性进行比对,肯定是不可能是相同引用了,所以2017.3.
-
探索Java中的equals()和hashCode()方法_动力节点Java学院整理
equals()和hashCode()区别? equals():反映的是对象或变量具体的值,即两个对象里面包含的值--可能是对象的引用,也可能是值类型的值. hashCode():计算出对象实例的哈希码,并返回哈希码,又称为散列函数.根类Object的hashCode()方法的计算依赖于对象实例的D(内存地址),故每个Object对象的hashCode都是唯一的:当然,当对象所对应的类重写了hashCode()方法时,结果就截然不同了. 之所以有hashCode方法,是因为在批量的对象比
-
java集合——Java中的equals和hashCode方法详解
Java中的equals方法和hashCode方法是Object中的,所以每个对象都是有这两个方法的,有时候我们需要实现特定需求,可能要重写这两个方法,今天就来介绍一些这两个方法的作用. equals()和hashCode()方法是用来在同一类中做比较用的,尤其是在容器里如set存放同一类对象时用来判断放入的对象是否重复. 这里我们首先要明白一个问题: equals()相等的两个对象,hashcode()一定相等,equals()不相等的两个对象,却并不能证明他们的hashcode()不相等.换
-
深入理解equals和hashCode方法
前言 在程序设计中,有很多的"公约",遵守约定去实现你的代码,会让你避开很多坑,这些公约是前人总结出来的设计规范. Object类是Java中的万类之祖,其中,equals和hashCode是2个非常重要的方法. 这2个方法总是被人放在一起讨论.最近在看集合框架,为了打基础,就决定把一些细枝末节清理掉.一次性搞清楚! 下面开始剖析. public boolean equals(Object obj) Object类中默认的实现方式是 : return this == obj .那就是说
-
django 解决扩展自带User表遇到的问题
首先要扩展自带的auth_user表我就放个图吧, 同时setting中应该设置: # 此处重载是为了使UserProfile生效 AUTH_USER_MODEL = "EcdsApp.UserProfile" 本人的项目需要对此表进行扩展,再建两个子表关联这个表,关联关系为一对一: 修改完成之后进行子表关联: from django.contrib.auth.models import AbstractUser, User from django.conf import settin
-
解决Keras自带数据集与预训练model下载太慢问题
keras的数据集源码下载地址太慢.尝试过修改源码中的下载地址,直接报错. 从源码或者网络资源下好数据集,下载好以后放到目录 ~/.keras/datasets/ 下面. 其中:cifar10需要改文件名为cifar-10-batches-py.tar.gz ,cifar100改为 cifar-100-python.tar.gz , mnist改为 mnist.npz 预训练models放到 ~/.keras/models/ 路径下面即可. 补充知识:Keras下载的数据集以及预训练模型
-
Java中==与equals()及hashcode()三者之间的关系详解
目录 1.= = 2.equals() 3.重写equals() 4.equals()比较流程 5.hashcode() 1.= = =为赋值运算符,==为比较运算符,仅比较对象的内存地址,无法比较真正意义上的相等! JDK里的equals方法就是通过==来实现的比较对象的内存地址 以Integer为例 Integer a = 127; Integer b = 127; System.out.println(a == b);//true Integer c = 128; Integer d =
-
Python使用defaultdict解决字典默认值
目录 1.导入defaultdict 2.创建defaultdict 3.使用defaultdict 4.添加defaultdict默认值 5.结论 在Python中,defaultdict是一种特殊类型的字典,它可以自动为字典中不存在的键设置默认值.这种类型的字典是在collections模块中定义的.它为我们提供了一个更方便,更容易使用的字典.在这篇文章中,我们将深入探讨Python中的defaultdict,并探讨如何使用它们. 1.导入defaultdict 我们需要先导入包含defau
-
JS解决IOS中拍照图片预览旋转90度BUG的问题
上篇文章[Js利用Canvas实现图片压缩功能]中做了图片压缩上传,但是在IOS真机测试的时候,发现图片预览的时候自动逆时针旋转了90度.对于这个bug,我完全不知道问题出在哪里,接下来就是面向百度编程了.通过度娘找到了相关资料,解决方法记录在此.这个问题的具体因素其实我还是不清楚是为何导致的,只有IOS和部分三星手机会出现此bug. 绝大部分的安卓机并无此问题. 解决此问题需要引入一个第三方 JS 库: exif.js 下载地址:https://github.com/exif-js/exif-
随机推荐
- jQuery使用after()方法在元素后面添加多项内容的方法
- AngularJS仿苹果滑屏删除控件
- PHP实现通过正则表达式替换回调的内容标签
- Android基于zxing的二维码(网格)扫描 仿支付宝网格扫描
- asp.net Web站点风格切换的实现
- php实现mysql数据库连接操作及用户管理
- php无限遍历文件夹示例分享
- Google Voice 短信发送接口PHP开源版(2010.5更新)
- 关于preg_replace函数的问题讲解
- php+mysql数据库实现无限分类的方法
- LINUX安全设置之关于GRUB加密图文教程全解
- js判断登陆用户名及密码是否为空的简单实例
- JavaScript中for循环的使用详解
- JavaScript实现从数组中选出和等于固定值的n个数
- Android特效之水波纹的实现
- C语言金币阵列问题解决方法
- IOS 上架后出现90034代码错误问题解决
- 兼容PHP5的PHP目录管理函数库
- 网跃科技为您提供免费100M全能型空间
- C语言实现桶排序的方法示例