equalsandhashcode(hashcode和equals的关系是什么)

2025-02-18 19:20:04 0

equalsandhashcode(hashcode和equals的关系是什么)

本文目录

hashcode和equals的关系是什么

hashcode和equals的关系如下:

1、如果两个对象equals相等,那么这两个对象的HashCode一定也相同。

2、在重写了equals方法后,尽量也重写了hashcode方法,通过一定的算法,使他们在equals相等时,也会有相同的hashcode值。

3、hashcode就是在hash表中对应的位置。

hashcode和equals的特点

hashcode代表对象的地址说的是对象在hash表中的位置,物理地址说的对象存放在内存中的地址。HashCode的存在主要是为了查找的快捷性,HashCode是用来在散列存储结构中确定对象的存储地址的(后半句说的用hashcode来代表对象就是在hash表中的位置)。

equals和hashcode的区别,hashcode的作用

equals():反映的是对象或变量具体的值,即两个对象里面包含的值--可能是对象的引用,也可能是值类型的值。hashCode():计算出对象实例的哈希码,并返回哈希码,又称为散列函数。根类Object的hashCode()方法的计算依赖于对象实例的D(内存地址),故每个Object对象的hashCode都是唯一的;当然,当对象所对应的类重写了hashCode()方法时,结果就截然不同了。  之所以有hashCode方法,是因为在批量的对象比较中,hashCode要比equals来得快,很多集合都用到了hashCode,比如HashTable。   两个obj,如果equals()相等,hashCode()一定相等。  两个obj,如果hashCode()相等,equals()不一定相等(Hash散列值有冲突的情况,虽然概率很低)。所以:  可以考虑在集合中,判断两个对象是否相等的规则是:    第一步,如果hashCode()相等,则查看第二步,否则不相等;    第二步,查看equals()是否相等,如果相等,则两obj相等,否则还是不相等。 1、首先equals()和hashcode()这两个方法都是从object类中继承过来的。  equals()是对两个对象的地址值进行的比较(即比较引用是否相同)。  hashCode()是一个本地方法,它的实现是根据本地机器相关的。2、Java语言对equals()的要求如下,这些要求是必须遵循的:  A 对称性:如果x.equals(y)返回是“true”,那么y.equals(x)也应该返回是“true”。  B 反射性:x.equals(x)必须返回是“true”。  C 类推性:如果x.equals(y)返回是“true”,而且y.equals(z)返回是“true”,那么z.equals(x)也应该返回是“true”。  D 一致性:如果x.equals(y)返回是“true”,只要x和y内容一直不变,不管你重复x.equals(y)多少次,返回都是“true”。  任何情况下,x.equals(null),永远返回是“false”;x.equals(和x不同类型的对象)永远返回是“false”。3、equals()相等的两个对象,hashcode()一定相等;  反过来:hashcode()不等,一定能推出equals()也不等;  hashcode()相等,equals()可能相等,也可能不等。

hashcode和equals,怎么理解这段话,最好举例

两个非基本类型变量进行比较时,先比较两个对象的hashcode,如果不一致就认为是不相等的,直接返回结果,如果相等会接着调用equals方法进行判断,如果你需要自定义比较规则,那么就需要重写hashcode和equals方法,比如有一个类User,有一个属性name,我们认为name相等那么两个对象就相等,这种情况就需要重写equals和hashcode方法:

如果不重写就会调用Object的hashcode和equals方法,原理如下:

public class User {    private String name;    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    @Override    public int hashCode() {        // 返回的是对象的内存地址        return super.hashCode();    }    @Override    public boolean equals(Object obj) {        // 可查看源码发现调用的是(this == obj),说明比较的还是内存地址        return super.equals(obj);    }}

要实现上面的需求就需要重写hashcode()和equals():

public class User {    private String name;    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    @Override    public int hashCode() {        return name.hashCode();    }    @Override    public boolean equals(Object obj) {        if (obj == null) {            return false;        }        if (obj instanceof User) {            return name.equals(((User) obj).getName());        }        return false;    }}

如果我们只是重写了equals而没有重写hashcode,那么两个对象比较时

User user1 = new User();user1.setName(“lily“);User user2 = new User();user2.setName(“lily“);boolean b = user1.equals(user2);

由于user1和user2是两个对象,所以user1和user2的hashcode肯定是不相等的,那么会直接返回false,不会进入equals方法比较,就不会达到预期的需求。

equalsandhashcode(hashcode和equals的关系是什么)

本文编辑:admin
: equalsandhashcode,

更多文章:


c语言自学推荐网课(B站c语言的网课哪个好)

c语言自学推荐网课(B站c语言的网课哪个好)

本文目录B站c语言的网课哪个好我现在是大一新生,想自学c语言,有没有什么好的网络课程推荐,我完全就是一小白,所以需要从基础开始讲想自学C语言有什么好的视频课推荐C语言教程哪家好想自学C语言网上谁的视频比较好C语言自学看谁的视频好B站c语言的

2025年3月10日 13:40

在线转换字体(内蒙文字在线转换)

在线转换字体(内蒙文字在线转换)

本文目录内蒙文字在线转换艺术字在线转换怎么预览内蒙文字在线转换咨询记录 · 回答于2021-10-27内蒙文字在线转换首先你要先下个字体:monggulian Baiti ;其次到中国民族语文翻译局,把中文翻译成蒙文。最后到你的文档内把翻译

2025年3月31日 04:10

buy up(buy up 和 buying up 的区别)

buy up(buy up 和 buying up 的区别)

本文目录buy up 和 buying up 的区别pick up有哪几种意思(至少七个!)buy up 和 buying up 的区别这话不完整,前面应该还有,这个的区别只在语法上。词性不同在句子中的作用就不同,意思也就不同。make s

2025年3月27日 17:40

svg是什么意思?svg文件是什么/怎么打开

svg是什么意思?svg文件是什么/怎么打开

本文目录svg是什么意思svg文件是什么/怎么打开怎样保存网页上的svg图片svg是什么意思svg是静止无功发生器。静止无功发生器,英文描述为:Static Var Generator,简称为SVG。又称高压动态无功补偿发生装置,或静止同步

2025年3月18日 03:20

tcpip协议包括哪两个核心协议(TCP/IP网络体系结构中,各层内分别有什么协议,每一种协议的作用是什么)

tcpip协议包括哪两个核心协议(TCP/IP网络体系结构中,各层内分别有什么协议,每一种协议的作用是什么)

本文目录TCP/IP网络体系结构中,各层内分别有什么协议,每一种协议的作用是什么TCP/IP协议包含哪些常用协议TCP/IP网络体系结构中,各层内分别有什么协议,每一种协议的作用是什么一、TCP/IP网络体系结构中,常见的接口层协议有:Et

2025年3月3日 08:00

请问叉乘是如何运算的?向量叉乘公式是什么

请问叉乘是如何运算的?向量叉乘公式是什么

本文目录请问叉乘是如何运算的向量叉乘公式是什么角速度叉乘半径的方向请教下叉乘的右手螺旋定则怎样判断两个矢量叉乘后得的第三个矢量的方向关于向量的叉乘右手定则判方向请问叉乘是如何运算的向量的叉乘运算法则为|向量c|=|向量a×向量b|=|a||

2025年2月10日 10:30

asynctask源码分析(android.os.asynctask需要什么jar包)

asynctask源码分析(android.os.asynctask需要什么jar包)

本文目录android.os.asynctask需要什么jar包asynctask 执行任务时,一个任务出问题了,会影响后面任务的进行吗Android AsyncTask源码中 SerialExecutor类有什么作用自定义控件 事件分发机

2025年3月28日 06:20

netlink光纤收发器使用说明(光纤收发器六个指示灯说明和指示的功能分别是什么)

netlink光纤收发器使用说明(光纤收发器六个指示灯说明和指示的功能分别是什么)

本文目录光纤收发器六个指示灯说明和指示的功能分别是什么怎么使用光纤收发器netlink光纤收发器是什么作用啊、光纤收发器六个指示灯说明和指示的功能分别是什么光纤收发器六个指示灯说明和指示的功能:1、POWER: 亮 表示光纤收发器已经通电。

2025年3月17日 12:30

compare to用法(compared to的用法)

compare to用法(compared to的用法)

本文目录compared to的用法“compare to”和“ compare with”的意思与用法差别是什么compared to的用法compared to ...意为“与……相比”,常在句中作状语。compared 读法 英  意

2025年2月13日 16:50

nsis使用(关于NSIS的问题)

nsis使用(关于NSIS的问题)

本文目录关于NSIS的问题nsis是什么怎么用关于NSIS的使用!关于NSIS的问题工具:NIS Edit+Nullsoft Installation System(NSIS) 思路:脚本向导+修改代码=个性化安装包 步骤: 一、利用向导制

2025年3月27日 22:40

txt转json在线工具(如何使用JSON 转换工具详细解析)

txt转json在线工具(如何使用JSON 转换工具详细解析)

本文目录如何使用JSON 转换工具详细解析C# json文件如何使用JSON 转换工具详细解析使用JSON 转换工具详细解析:这个处理过程包括将 IRI 转换为一个等价的 URL。在核心 Atom 词汇表中,icon、logo、uri、li

2025年3月12日 11:50

自学网ps基础视频教程(零基础怎么自学PS有什么好的网站和方法分享一下)

自学网ps基础视频教程(零基础怎么自学PS有什么好的网站和方法分享一下)

本文目录零基础怎么自学PS有什么好的网站和方法分享一下有哪些适合初学者、专业的ps教程可以推荐怎么系统地自学Photoshop想自学photoshop,零基础,只为兴趣,能推荐一下方法吗零基础怎么自学PS有什么好的网站和方法分享一下1.PS

2025年3月10日 11:00

thinner造句(用heavier,longer,thinner,smaiier分别造句)

thinner造句(用heavier,longer,thinner,smaiier分别造句)

本文目录用heavier,longer,thinner,smaiier分别造句英文单词大全加意思,类型(如n·,adj·)和音标并造句35个,最好要一个意思的用heavier,longer,thinner,smaiier分别造句答案是:Yo

2025年3月16日 03:40

uml流程图((Java)UML图中没有流程图吧)

uml流程图((Java)UML图中没有流程图吧)

本文目录(Java)UML图中没有流程图吧用visio2010怎么做UML流程图,我老是出现此uml形状所在的绘图页不是UML模型图的一部分啥的= =流程图三个条件并列怎么画(Java)UML图中没有流程图吧UML是统一建模语言。流程图类似

2025年2月8日 20:40

repairable(Any sum received for repairable damage to a fixed asset is a capital receipt, but it should be set)

repairable(Any sum received for repairable damage to a fixed asset is a capital receipt, but it should be set)

本文目录Any sum received for repairable damage to a fixed asset is a capital receipt, but it should be setrepairable是什么意思rep

2025年2月9日 17:30

sit down怎么读英语(sit down怎么读)

sit down怎么读英语(sit down怎么读)

本文目录sit down怎么读想问请坐下英语怎么读坐下用英语怎么说sitdown英语怎么读音坐下的英语怎么说坐下英语怎么说sit down怎么发音坐下的英语怎么读请坐下用英语怎么读sit down怎么读sit down读音:英   坐下例句

2025年2月25日 01:40

iframe(iframe怎么使用)

iframe(iframe怎么使用)

本文目录iframe怎么使用iframe中文是什么意思iframe什么意思怎么用iframe是什么意思iframe用法如何让iframe根据浏览器的宽度以及高度变化,自动改变大小js如何修改iframe 中元素的属性下列关于标记属性正确的是

2025年2月26日 00:40

settimeout mdn(Node.js的HTTP与事件初步介绍&怎么查看API)

settimeout mdn(Node.js的HTTP与事件初步介绍&怎么查看API)

本文目录Node.js的HTTP与事件初步介绍&怎么查看API如何使用HTML5实现全屏API实现promise.all方法Node.js的HTTP与事件初步介绍&怎么查看APINode.js的HTTP与事件初步介绍&如何查看API(入门篇

2025年4月3日 13:50

怎么在自己手机上登录微信公众号?手机微信公众号怎么登陆

怎么在自己手机上登录微信公众号?手机微信公众号怎么登陆

本文目录怎么在自己手机上登录微信公众号手机微信公众号怎么登陆微信公众号怎么在手机上登录手机怎么登陆公众号电脑如何登录微信公众号在哪里登录微信公众号如何进入微信公众平台怎么登录公众号微信公众账号注册了怎么登录怎么在自己手机上登录微信公众号1、

2025年2月9日 21:00

socks5代理软件源码(SOCKS5代理的软件二)

socks5代理软件源码(SOCKS5代理的软件二)

本文目录SOCKS5代理的软件二求delphi 设置socks5代理访问网页的源码谁有免费代理上QQ的SOCKS5,要能用的..如何用spi实现socks5代理帮我写一个VB源码,自动使用socks5代理后打开一个网页大神们帮帮忙SOCKS

2025年3月28日 09:40

近期文章

本站热文

harbor,port,pier的区别?谁能解释“harbour“(港口)与“pier“(码头)的区别
2025-02-22 17:40:03 浏览:18
ibatis foreach(ibatis 批量update操作)
2025-02-10 23:40:06 浏览:7
endless rain(endless rain表达什么情感)
2025-02-14 06:00:02 浏览:6
标签列表

热门搜索