equals键(为什么重写equals方法,一定要重写HashCode方法)

:暂无数据 2026-04-04 05:40:02 0
equals键为什么重写equals方法,一定要重写HashCode方法,看似独立,实则血脉相连。它们是如何相互影响的?本文将为你层层剖析。

本文目录

为什么重写equals方法,一定要重写HashCode方法

如果你重载了equals,比如说是基于对象的内容实现的,而保留hashCode的实现不变,那么很可能某两个对象明明是“相等”,而hashCode却不一样。
这样,当你用其中的一个作为键保存到hashMap、hasoTable或hashSet中,再以“相等的”找另一个作为键值去查找他们的时候,则根本找不到。
使用HashMap,如果key是自定义的类,就必须重写hashcode()和equals()。
而对于每一个对象,通过其hashCode()方法可为其生成一个整形值(散列码),该整型值被处理后,将会作为数组下标,存放该对象所对应的Entry(存放该对象及其对应值)。 equals()方法则是在HashMap中插入值或查询时会使用到。当HashMap中插入值或查询值对应的散列码与数组中的散列码相等时,则会通过equals方法比较key值是否相等,所以想以自建对象作为HashMap的key,必须重写该对象继承object的hashCode和equals方法。 2.本来不就有hashcode()和equals()了么?干嘛要重写,直接用原来的不行么? HashMap中,如果要比较key是否相等,要同时使用这两个函数!因为自定义的类的hashcode()方法继承于Object类,其hashcode码为默认的内存地址,这样即便有相同含义的两个对象,比较也是不相等的,例如,生成了两个“羊”对象,正常理解这两个对象应该是相等的,但如果你不重写 hashcode()方法的话,比较是不相等的!
HashMap中的比较key是这样的,先求出key的hashcode(),比较其值是否相等,若相等再比较equals(),若相等则认为他们是相等的。若equals()不相等则认为他们不相等。如果只重写hashcode()不重写equals()方法,当比较equals()时只是看他们是否为同一对象(即进行内存地址的比较),所以必定要两个方法一起重写。HashMap用来判断key是否相等的方法,其实是调用了HashSet判断加入元素是否相等。
引用别人说的一段话哈~
一般来说,如果你要把一个类的对象放入容器中,那么通常要为其重写equals()方法,让他们比较地址值而不是内容值。特别地,如果要把你的类的对象放入散列中,那么还要重写hashCode()方法;要放到有序容器中,还要重写compareTo()方法。
equals()相等的两个对象,hashcode()一定相等;
equals()不相等的两个对象,却并不能证明他们的hashcode()不相等。换句话说,equals()方法不相等的两个对象,hashcode()有可能相等。(我的理解是由于哈希码在生成的时候产生冲突造成的)。
反过来:hashcode()不等,一定能推出equals()也不等;hashcode()相等,equals()可能相等,也可能不等
我的理解哈,

Java 从键盘输入String 用 equals 比较出错

java中的==是用来判断对象所使用的内存地址是不是同一个,进而判断是不是同一个对象。例如 objA == objB
注意这里是同一个对象才会是true,如果不是同一个对象,哪怕两个对象所有属性都相同也会返回false。
而equals则是一个方法,你可以为自己的类编写equals方法来判断是不是相等。这里String类就提供了equals方法来判断两个String对象是不是相同,而不是去判断两个String对象是不是同一个对象,因为我们一般使用中,只关心两个字符串内容相同与否,而不会关心是不是同一个对象。

怎么用计算器求排列组合求具体步骤.

支持计算排列组合的科学计算器,可以通过计算器来求排列组合。

一、通过计算器求组合数:

求5个中选出3个的组合数C(5,3):

1、拿出科学计算器,按下右上角的电源键打开计算器。

2、打开计算器后,先按下组合数中第一个数字5。

3、找到计算器上的nCr键,按下【nCr】键,此键是用来求解组合数的键。

4、接着按下组合数中第二个数字3。

5、之后直接按等号键【=】,即可得出计算结果:【C(5,3)=(5×4×3×2×1)÷(3×2×1×2×1)=10】。

二、通过计算器来求排列数:

求5个中选出3个的排列P(5,3)。

1、按下shift键,可以实现切换nCr键为nPr键,后面会用到。

2、首先按下排列数中第一个数字5。

3、按下nCr键,此时的nCr键已经切换为【nPr】键,此键是用来求解排列数的键。

4、接着按下组合数中第二个数字3。

5、之后直接按等号键【=】,即可得出计算结果:【P(5,3)=(5×4×3)÷(2×1)=60】

本次关于equals键为什么重写equals方法,一定要重写HashCode方法的分享就到这里。想要解锁更多技能,请持续关注我们的频道/专栏。
本文编辑:admin

更多文章:


帝国cms多城市(帝国cms怎么实现一个后台管理多个独立网站)

帝国cms多城市(帝国cms怎么实现一个后台管理多个独立网站)

关注本号的朋友都知道,我们一直在持续输出关于帝国cms多城市的干货。今天,我们就聚焦到大家反复问到的帝国cms怎么实现一个后台管理多个独立网站上。

2026年4月4日 07:20

se是什么意思(意大利语se是什么意思)

se是什么意思(意大利语se是什么意思)

想快速搞懂se是什么意思吗?本文将围绕意大利语se是什么意思等核心问题,用最直白的语言为您提供一份实用指南,帮您节省大量摸索的时间。

2026年4月4日 07:00

从0开始学php(零基础学php怎么学)

从0开始学php(零基础学php怎么学)

就像学骑车需要掌握平衡一样,理解从0开始学php的窍门,恰恰在于把握好零基础学php怎么学这个“平衡点”。

2026年4月4日 06:40

aeindex函数怎么用(Excel中 index函数的array区域,如何用表中的一个单元格内的值指定)

aeindex函数怎么用(Excel中 index函数的array区域,如何用表中的一个单元格内的值指定)

今天给各位分享Excel中 index函数的array区域,如何用表中的一个单元格内的值指定的知识,其中也会对Excel中 index函数的array区域,如何用表中的一个单元格内的值指定进行解释,如果能碰巧解决你现在面临的问题,别忘了关注

2026年4月4日 06:20

浮点型包括哪两种(C语言 四种基本数据类型)

浮点型包括哪两种(C语言 四种基本数据类型)

大家好,浮点型包括哪两种相信很多的网友都不是很明白,包括C语言 四种基本数据类型也是一样,不过没有关系,接下来就来为大家分享关于浮点型包括哪两种和C语言 四种基本数据类型的一些知识点,大家可以关注收藏,免得下次来找不到哦,下面我们开始吧!

2026年4月4日 06:00

equals键(为什么重写equals方法,一定要重写HashCode方法)

equals键(为什么重写equals方法,一定要重写HashCode方法)

equals键和为什么重写equals方法,一定要重写HashCode方法,看似独立,实则血脉相连。它们是如何相互影响的?本文将为你层层剖析。

2026年4月4日 05:40

java模拟器爱吾游戏(爱吾自带的模拟器好嘛)

java模拟器爱吾游戏(爱吾自带的模拟器好嘛)

本篇关于java模拟器爱吾游戏的讲解,将摒弃陈词滥调,直击爱吾自带的模拟器好嘛这一实战要害,给你可即刻应用的策略。

2026年4月4日 05:20

resp***etext中的值(怎么获得由Ajax得到的Json的resp***eText中以字符串为键所对应的值)

resp***etext中的值(怎么获得由Ajax得到的Json的resp***eText中以字符串为键所对应的值)

本篇内容旨在成为您理解resp***etext中的值的实用手册,其中怎么获得由Ajax得到的Json的resp***eText中以字符串为键所对应的值将是我们要重点打磨的章节。

2026年4月4日 05:00

系统架构师题型(系统架构设计师综合知识考什么)

系统架构师题型(系统架构设计师综合知识考什么)

本文旨在解决您关于系统架构师题型的两大困惑:一是理清基本概念,二是深入解析系统架构设计师综合知识考什么。内容干练,直奔主题。

2026年4月4日 04:40

猿辅导少儿编程怎么样(西瓜编程和猿编程哪个好)

猿辅导少儿编程怎么样(西瓜编程和猿编程哪个好)

正如一位名家所言:“弄懂西瓜编程和猿编程哪个好,是通往猿辅导少儿编程怎么样殿堂的捷径。” 今天,我们就来走一走这条捷径。

2026年4月4日 04:20

最近更新

从0开始学php(零基础学php怎么学)
2026-04-04 06:40:01 浏览:0
热门文章

springframework jar包导入(spring 构建rest应该引入什么jar包啊/)
2026-03-31 23:40:01 浏览:0
background怎么读音(background怎么读)
2026-03-31 02:20:01 浏览:0
标签列表