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

更多文章:


在线汉字转gbk(java怎么把UTF-8字串转成GBK字串)

在线汉字转gbk(java怎么把UTF-8字串转成GBK字串)

您是否曾想过,在线汉字转gbk究竟是怎么一回事?它与java怎么把UTF-8字串转成GBK字串之间又有什么联系?本文将为您一探究竟。

2026年4月6日 16:20

ecshop项目介绍(开发一套php多用户商城系统需要多少钱)

ecshop项目介绍(开发一套php多用户商城系统需要多少钱)

还记得第一次接触ecshop项目介绍时的茫然吗?是开发一套php多用户商城系统需要多少钱这个概念,像一盏灯照亮了后续的路。本文将为你点亮这盏灯。

2026年4月6日 16:00

carol英文名寓意是什么?carol是什么意思

carol英文名寓意是什么?carol是什么意思

正如一位名家所言:“弄懂carol英文名寓意是什么,是通往carol殿堂的捷径。” 今天,我们就来走一走这条捷径。

2026年4月6日 15:40

c登录界面代码(c语言 商品销售系统登入界面该怎么写)

c登录界面代码(c语言 商品销售系统登入界面该怎么写)

c登录界面代码的背后,隐藏着怎样的秘密?c语言 商品销售系统登入界面该怎么写又在其中扮演了何种角色?带着疑问,我们一起探秘。

2026年4月6日 15:20

随机时间公式excel(excel 时间随机函数公式)

随机时间公式excel(excel 时间随机函数公式)

很多新手在接触随机时间公式excel时,都会在excel 时间随机函数公式这个问题上徘徊良久。本文将亮起指路明灯,带你快速通关。

2026年4月6日 15:00

php 位运算(php位运算的问题)

php 位运算(php位运算的问题)

这篇文章给大家聊聊关于php 位运算,以及php位运算的问题对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。

2026年4月6日 14:40

网络前端需要学什么(Web前端学习什么)

网络前端需要学什么(Web前端学习什么)

是不是总觉得网络前端需要学什么的知识体系太庞大,Web前端学习什么更是无从下手?本文将帮你化繁为简,抓住核心。

2026年4月6日 14:20

字符串比大小strcmp(c语言中比较两个字符串的大小)

字符串比大小strcmp(c语言中比较两个字符串的大小)

花费5分钟阅读本文,您将获得对字符串比大小strcmp和c语言中比较两个字符串的大小的清晰认知,远超自己搜索数小时的效果。

2026年4月6日 14:00

injuries什么意思(在英语中injuries是什么意思)

injuries什么意思(在英语中injuries是什么意思)

上一篇文章我们介绍了injuries什么意思的基础,今天我们将深入其核心环节——在英语中injuries是什么意思,看看它如何承前启后。

2026年4月6日 13:40

php小程序框架(用php如何生成小程序的小程序码)

php小程序框架(用php如何生成小程序的小程序码)

很多新手在接触php小程序框架时,都会在用php如何生成小程序的小程序码这个问题上徘徊良久。本文将亮起指路明灯,带你快速通关。

2026年4月6日 13:20

最近更新

php 位运算(php位运算的问题)
2026-04-06 14:40:02 浏览:0
热门文章

繁体字转换器(繁体字转化)
2026-04-04 18:00:01 浏览:0
androidbc(bc8-android是什么手机型号)
2026-04-05 07:20:02 浏览:0
标签列表