ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

equals

2021-09-07 21:02:07  阅读:144  来源: 互联网

标签:img 对象 重写 equals hashcode 方法


==与equals的区别,以及相关系列的问题

1、==

2、equals()

3、hashcode()

4、相关问题

4.1 重写完hashcode方法之后,散列码相同的两个对象一定相等吗?
4.2 如果没有重写hashcode方法,散列码一样的两个对象一定相等吗?
4.3 为什么重写了equals方法还要重写hashcode方法?如果不重写会怎样?

1、==

​ 如果是两个基本数据类型作比较的话,==比较的是值

​ 如果是两个引用类型作比较的话, ==比较的是内存地址

2、equals

​ 1、首先我们知道equals方法是object类中的一个方法,如果不进行重写的话他的作用等效于==
在这里插入图片描述

​ [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aGhhgbNv-1631019348334)(D:\mycsdn\images\equals.png)]

​ 所以我们在应用时一般会重写equals方法,用来比较两个对象的属性是否相等

​ 2、一般来讲规范的equals要满足:

​ 自反性(x.equals(x) 应该是true)

​ 对称性(x.equals(y)与y.equals(x)的返回值应该是一致的)

​ 传递性(x.equals(y) y.equals(z) 如果是ture n那么x.equals(z)也应该是true )

​ 一致性(如果x和y的引用没变,那么多次调用x.equals(y)的结果应当是一致的

​ 对于任何非空引用x,x.equals(null)都应该返回false

​ 3、一般来讲java的内置类都重写了equals方法,比如String类
在这里插入图片描述

​ [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1GW3CADJ-1631019348339)(D:\mycsdn\images\String_equals.png)]

​ 4、重写一个equals方法的步骤

​ 4.1 先判断两个对象是否是同一个引用,如果是就直接返回true

​ 4.2 判断两个对象是否是同一个类型,如果不是就直接返回false

​ 4.3 将对象强制转换为相应类类型的变量

​ 4.4 判断两个对象的每个字段是否相等,基本数据类型用==判断,应用数据类型用equals判断,如果都相同就返回true,否则返回false

3、hashcode()

这个原理可以参考 :https://blog.csdn.net/jwbjwb123/article/details/119876353?spm=1001.2014.3001.5502

3.1 hashcode()是Object的一个方法,用于返回对象的hash码,返回类型是int

4、相关问题

4.1 重写完hashcode方法之后,散列码相同的两个对象一定相等吗?

​ 答案是不一定,简单来说不同的对象经过重写的hash算法之后得到的hash码是有可能相同的。

比如一个hash的计算方法是hash%2,那么 3 和 5 经过计算之后得到的hasa码是相同的。

4.2 如果没有重写hashcode方法,散列码一样的两个对象一定相等吗?

​ 答案也是不一定,因为根据鸽巢原理即使是不同的对象也会产生相同的hash码。

4.3 为什么重写了equals方法还要重写hashcode方法?如果不重写会怎样?

​ 在一般情况下这两个操作是一起重写的,如果只重写了equals,可能会导致在向set集合中添加对象时,添加重复的对象。如下没有重写hashCode()方法时

​ [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3503BLAv-1631019348343)(D:\mycsdn\images\override.png)]在这里插入图片描述

那么在set中就会添加两个相同的对象
在这里插入图片描述

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-z18MvHBf-1631019348347)(D:\mycsdn\images\result1.png)]

反之如果重写了hashCode方法则不会

么在set中就会添加两个相同的对象

[外链图片转存中…(img-z18MvHBf-1631019348347)]

反之如果重写了hashCode方法则不会
在这里插入图片描述

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LDMtEdU9-1631019348350)(D:\mycsdn\images\result2.png)]

标签:img,对象,重写,equals,hashcode,方法
来源: https://blog.csdn.net/jwbjwb123/article/details/120167105

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有