当前位置:网站首页>为什么重写equals()方法必须要重写hashCode()方法
为什么重写equals()方法必须要重写hashCode()方法
2022-07-25 10:22:00 【鸭蛋炒西红柿】
首先我们得知道一件事,对于两个不同的对象,它们通过hashcode()方法计算后的值可能相同,使用我们不能使用hashcode( )来判断两个对象是否相等,必须得通过equals()方法。
两个对象equals()相等,hashcode()必定相等
两个对象hashcode()不等,equals()必定也不等
两个对象hashcode()相等,对象不一定相等,需要通过equals()进一步判断。)
为什么我们要重写equals()方法呢?
有时在我们的业务系统中判断对象时有时候需要的不是一种严格意义上的相等,而是一种业务上的对象相等。在这种情况下,原生的equals方法就不能满足我们的需求了.
我们所知道的JavaBean的超类(父类)是Object类,JavaBean中的equals方法是继承自Object中的方法.Object类中定义的equals()方法是用来比较两个引用所指向的对象的内存地址是否一致.并不是比较两个对象的属性值是否一致,所以这时我们需要重写equals()方法.
我通俗一点说,有一个学生类 id,name,然后 A.id=1;A.name=“张三”,这时候有一个B.id也等于1,B.name=“张三”,这时候用equals方法去计算的时候我们得到的结果是false,但是我们业务上面的需求仅仅只是想比较字面上的,想得到的是true,这时候就得去重写equals()方法,当我们重写了equals()方法之后为什么要重写hashcode()方法呢?
我们规定了equals相等的情况下,hashCode()必须相等,还有一个官方点的解释就是比如我们在写某个类进行重写equals方法没有重写hashcode方法时,就会出现一种情况:equals比较结果相等时,hashcode比较不相等,虽然在这个类里面没有问题,但是如果我们放在哈希集合中时,在哈希集合中会产生equals相等而hashcode不同的情况,这就会导致哈希集合中equals判断的不正确(因为它是先通过hashcode比较的,hashcode不同就会认为它不相同),所以我们为了匹配哈希集合中的比较,我们需要在重写equals方法时重写hashcode方法。
边栏推荐
- Basic experiment of microwave technology - Filter Design
- Learn NLP with Transformer (Chapter 7)
- HCIA实验(07)综合实验
- Disabled and readonly and focus issues
- 2021 CEC written examination summary
- mysql主从复制与读写分离
- AI系统前沿动态第43期:OneFlow v0.8.0正式发布;GPU发现人脑连接;AI博士生在线众筹研究主题
- Learn NLP with Transformer (Chapter 6)
- 一个 DirectShow 播放问题的排查记录
- JS bidirectional linked list 02
猜你喜欢

Electromagnetic field and electromagnetic wave experiment I familiar with the application of MATLAB software in the field of electromagnetic field

SQL语言(三)

Learn NLP with Transformer (Chapter 6)

UE4.26源码版学习广域网独立服务器时遇到的客户端运行黑屏问题

【flask高级】结合源码详解flask的运行机制(出入栈)

2021 scenery written examination summary

Flask framework - session and cookies

PostgreSQL踩坑 | ERROR: operator does not exist: uuid = character varying

MySQL | GROUP_CONCAT函数,将某一列的值用逗号拼接

SQL语言(一)
随机推荐
Motivation of enterprises to practice open source
ESP32C3基于Arduino框架下的 ESP32 RainMaker开发示例教程
Reinforcement learning (III)
redis 哨兵,高可用的执行者
The practice of asynchronous servlet in image service
Esp8266 uses drv8833 drive board to drive N20 motor
HCIP实验(03)
SQL语言(三)
Disabled and readonly and focus issues
Hcip experiment (03)
JDBC的APi补充
100W了!
Esp32c3 based on the example tutorial of esp32 Rainmaker development under Arduino framework
JS hash table 01
NB-IOT控制液晶屏(日期的设置与读取)
The University of Gottingen proposed clipseg: a model that can perform three segmentation tasks simultaneously using text and image prompts
HDD杭州站全程体验有感
Flame framework - Flame WTF form: file upload, verification code
Dataset and dataloader data loading
SQL语言(六)