重写equals方法一定要重写hashcode方法吗
今天这句话疑惑了我一会,我就很疑惑啊,我单纯的比个对象我干嘛非得重写hashCode方法,为什么网上都在说一定要一定要,难道这不是分情况吗?????
不需要重写的情况
我们先来看Object的equals方法,也就是我们不重写equals时用的方法
public boolean equals(Object obj) {return (this == obj);}
see,就是个==连接的,如果不是基本数据类型就比对象地址值
所以我们如果想让下边代码输出为true
Person person2 = new Person("大华");
Person person1 = new Person("大华");
System.out.println(person1.equals(person2));
就只需要重写一下equals就可以了,就不需要重写hashcode了。
需要重写的情况
在有hash比较时,判断两个对象是否相等,不仅要看equals为true,还看hashCode是否相等。例子,在map存储时(我们需要了解map的put原理,才更有助于我们理解)
@Testpublic void doSomething(){HashMap<Person, Object> map = new HashMap<>();Person person2 = new Person("大华");Person person1 = new Person("大华");map.put(person1,1);map.put(person2,2);map.forEach((k,v)->{System.out.println(k+"-------------"+v);});}
如果只重写equals不重写hashCode(默认调用Object类的hashCode方法),,他就会认为大华不是一个人。结果为
Person{name='大华}-------------1
Person{name='大华}-------------2
如果全部重写,结果为
Person{name='大华}-------------2
哦呵,又是混天度日的一天,网上的言论(一定要重写)让我这个初学者想了很久
重写equals方法一定要重写hashcode方法吗相关推荐
- 为什么重写equals()就一定要重写hashCode()方法
Object类,所有类的父类 一.为什么重写equals()方法一定要重写hashCode()方法 1.首先解释equals方法和hashcode方法分别是用来干什么的? equals()方法: 在O ...
- [改善Java代码]覆写equals方法必须覆写hashCode方法
覆写equals方法必须覆写hashCode方法,这条规则基本上每个Javaer都知道,这也是JDK API上反复说明的,不过为什么要这样做呢?这两个方法之间有什么关系呢?本建议就来解释该问题,我们先 ...
- java -为什么重写equals(),还需要重写hashCode()?
1.先post这两个方法的基本定义: equals()的定义: 浅谈Java中的equals和==(转) hashCode()的定义: java中hashCode()方法的作用 Java中hashCo ...
- why在重写equals时还必须重写hashcode方法
首先我们先来看下String类的源码:可以发现String是重写了Object类的equals方法的,并且也重写了hashcode方法 public boolean equals(Object anO ...
- java 重写equals的要点_重写equals 方法的注意事项
java.lang.Object 中的equals方法如下 public boolean equals(Object obj) { return (this == obj); } 什么时候需要重写eq ...
- JAVA中重写equals()方法的同时要重写hashcode()方法
object对象中的 public boolean equals(Object obj),对于任何非空引用值 x 和 y,当且仅当 x 和 y 引用同一个对象时,此方法才返回 true:注意:当此方法 ...
- JAVA中list.contains()方法,要重写equals(),hashcode()方法
今天动力节点java培训机构小编为大家介绍"JAVA中list.contains()方法,要重写equals(),hashcode()方法",希望能够帮助正在学习java的零基础学 ...
- java重写6,java重写equals()方法和hashCode()方法
1.equals()方法和hashCode()方法是什么? equals()和hashCode()都是是Java中万物之源Object类中的方法: equals方法用于比较两个对象是否相同,Objec ...
- java重写面试题_Java面试题:重写了equals方法,为什么还要重写hashCode方法?
核心问题:重写了equals方法,为什么还要重写hashCode方法? 这不仅仅是一道面试题,而且是关系到我们的代码是否健壮和正确的问题.在前面两篇文章涉及到了equals方法的底层讲解:<说说 ...
- 重写equals()与hashCode()方法
出自:http://blog.csdn.net/renfufei/article/details/16339351 Java语言是完全面向对象的,在java中,所有的对象都是继承于Object类.Oj ...
最新文章
- 强烈安利!这个私藏已久的神器!
- ITK:生成随机图片
- Shell脚本的学习笔记一:变量
- Java怎么重复使用套接字_在java中连续地通过套接字传输数据
- Gym 100090D Insomnia
- android 链接分享到朋友圈,android 分享到微信朋友圈或微信好友
- Mac OS 文件、文件夹重命名的方法
- python小结教学_Python Str内部功能-个人课堂笔记,课后总结
- 获取Linux的方法,CDN Linux系统中获取LDNS的方法
- 2021最新基于uniapp的计算机考研助手小程序(含管理端)
- 详解Unity的几种移动方式实现
- Erlang 游戏开发经验总结
- 【无题】2022-1
- anaconda查看环境中安装的包及具体位置查找
- 哪些技能,经较短时间的学习,就可以给人的生活带来巨大帮助?
- html js打印页边距,js 设立网页打印的页眉页脚和页边距
- Revit中添加水平仰视平面图及水平剖面
- centos 静态编译MP4box
- JS将对象数组按指定顺序排列
- 皮尔森相关性的相似度