为什么重写equals()和hashcode()
首先写个例子 public class TestTest{String name ;TestTest(String name){this.name = name;} public static void main(String[] args){TestTest test1 = new TestTest("hello");TestTest test2 = new TestTest("hello");System.out.println("输出test1是否等于test2:"+test1.equals(test2));//如果不重写equals()两者不等,重写相等Map<TestTest, String> map = new HashMap<>(4);map.put(test1, "hello");String hello = map.get(test2);System.out.println(hello);//结果为null,添加重写后会拿到hello }
//添重写后
@Override public boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;TestTest testTest = (TestTest) o;return name.equals(testTest.name); }@Override public int hashCode() {return Objects.hash(name); } }
因为默认情况下会调用Object的equals(),hashcode(),而map中get时get获取的hashCode是hashMap中的hash()来获取地址所以不一致,这也是为什么通常用String或Integer等final 并且重写了hashCode和equals类来做键值来防止键值被重写。下图是object的两个被重写的方法:
为什么重写equals()和hashcode()相关推荐
- hash 值重复_程序员:判断对象是否重复,不重写equals和hashcode不行吗?
前言 大家都知道如果要判断一个对象是否相同,都要在对象实体中重写equals和hashcode方法,那你知道为什么重写这两个方法就能根据自己定义的规则实现相等比较了吗? 今天带大家来了解一下equal ...
- 不同时重写equals和hashCode又会怎样?
作者:flyhero 微信公众号:码上实战(ID:Push-Code) 可能一问到equals和hashCode相关的问题,就会有人讲他们的自反性,对称性,一致性,传递性等几条约定了,此时我不得不佩服 ...
- Java:重写equals()和hashCode()
http://blog.csdn.net/ansel13/article/details/5437486 很基础的东西就是由于没上心,三番五次地出错,这次好好总结下吧. 众所周之,String .Ma ...
- 在Java里重写equals和hashCode要注意什么问题
问题:在Java里重写equals和hashCode要注意什么问题 重写equals和hashCode有哪些问题或者陷阱需要注意? 回答一 理论(对于语言律师或比较倾向于数学的人): equals() ...
- 为什么使用HashMap需要重写hashcode和equals方法_不同时重写equals和hashCode又会怎样?听听过来人的经验...
可能一问到equals和hashCode相关的问题,就会有人讲他们的自反性,对称性,一致性,传递性等几条约定了,此时我不得不佩服,这么多约定竟然都能记得,但我不知道你是不是真的理解呢. 一.我不同时重 ...
- 运用简单的超市购物车系统,理解重写equals、hashcode的意义
更多干货见博主个人网站:https://blog.zhenglin.work 运用简单的超市购物车系统,理解重写equals.hashcode的意义,以及map的学习 商品类: 先编写一个商品类,要有 ...
- Java重写equals()和hashCode()
1.何时需要重写equals() 当一个类有自己特有的 "逻辑相等"概念(不同于对象身份的概念). 2.设计equals() [1]使用instanceof操作符检查 " ...
- Java重写equals和hashCode方法
在日常程序中,我们习惯使用equals方法来比较两个对象,继承自Object的equals方法默认的比较两个对象的内存地址(String类重写了equals方法,比较字符串的内容).假如我们创建了两个 ...
- Java拾遗:001 - 重写 equals 和 hashCode 方法
2019独角兽企业重金招聘Python工程师标准>>> 重写equals方法 在Java中Object类是一个具体类,但它设计的主要目的是为了扩展,所以它的所有非final方法,都被 ...
最新文章
- handle句柄 matlab_学习随笔之Matlab句柄对象深拷贝方法
- gcc创建静态库和共享库
- 华为手机拍照后图库里无照片_华为图库中上千张照片,如何快速找到想要的照片?...
- android dts配置_AndroidLinux关于DTS设备树源码的介绍
- 微信小程序实现循环列表下拉功能(点击事件)
- php 声波图,Canvas 美丽的声波图
- 最优化学习笔记(五)——牛顿法(多维数据)
- Java 并发编程之可重入锁 ReentrantLock
- Iphone 视图跳转方法总结
- docker搭建私有registry
- 《power BI 视频7》六合一图表案例
- 机器人正运动学(7)—— 连杆坐标系与DH参数
- Python 实现PID控制一阶惯性系统
- jquery实现点击图片放大功能
- 医院体检PEIS系统
- Linux CentOS 重置root密码
- 加州大学欧文分校计算机排名,美国加州大学伯克利分校计算机专业排名
- backup archivelog all not backed up
- 在微信小程序中实现文字呼吸效果
- 【机器学习】有监督、无监督、自监督、半监督、弱监督的区别
热门文章
- 放置奇兵 算法 月度活动 破碎时空记录 第四关 双树精(大树)(格鲁)
- 各家版本控制系统(VCS)对比:VSS、SVN、Git。代码托管平台对比:GitLab、GitHub、码云(Gitee)、SourceForge、DevCloud(华为软件开发云)
- Mr. Main and Windmills 模拟,计算几何(昆明)
- 伯明顿分校计算机研究生专业,印第安纳大学伯明顿分校计算机科学硕士专业申请条件及申请材料...
- centos启动Nginx提示nginx: [emerg] still could not bind()
- 「后端小伙伴来学前端了」分析Vue脚手架结构
- es6 取数组的第一个和最后一个_JS算法题之每日一题- 17.在排序数组中查找元素的第一个和最后一个位置...
- linux 16.04系统下载,ubuntu16.04下载|ubuntu 16.04 官方完整版-520下载站
- linux远程访问及控制
- 16位转8位 winhex_078期中4位2复式3码232,排列五第19079期爱我彩规