今天这句话疑惑了我一会,我就很疑惑啊,我单纯的比个对象我干嘛非得重写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方法吗相关推荐

  1. 为什么重写equals()就一定要重写hashCode()方法

    Object类,所有类的父类 一.为什么重写equals()方法一定要重写hashCode()方法 1.首先解释equals方法和hashcode方法分别是用来干什么的? equals()方法: 在O ...

  2. [改善Java代码]覆写equals方法必须覆写hashCode方法

    覆写equals方法必须覆写hashCode方法,这条规则基本上每个Javaer都知道,这也是JDK API上反复说明的,不过为什么要这样做呢?这两个方法之间有什么关系呢?本建议就来解释该问题,我们先 ...

  3. java -为什么重写equals(),还需要重写hashCode()?

    1.先post这两个方法的基本定义: equals()的定义: 浅谈Java中的equals和==(转) hashCode()的定义: java中hashCode()方法的作用 Java中hashCo ...

  4. why在重写equals时还必须重写hashcode方法

    首先我们先来看下String类的源码:可以发现String是重写了Object类的equals方法的,并且也重写了hashcode方法 public boolean equals(Object anO ...

  5. java 重写equals的要点_重写equals 方法的注意事项

    java.lang.Object 中的equals方法如下 public boolean equals(Object obj) { return (this == obj); } 什么时候需要重写eq ...

  6. JAVA中重写equals()方法的同时要重写hashcode()方法

    object对象中的 public boolean equals(Object obj),对于任何非空引用值 x 和 y,当且仅当 x 和 y 引用同一个对象时,此方法才返回 true:注意:当此方法 ...

  7. JAVA中list.contains()方法,要重写equals(),hashcode()方法

    今天动力节点java培训机构小编为大家介绍"JAVA中list.contains()方法,要重写equals(),hashcode()方法",希望能够帮助正在学习java的零基础学 ...

  8. java重写6,java重写equals()方法和hashCode()方法

    1.equals()方法和hashCode()方法是什么? equals()和hashCode()都是是Java中万物之源Object类中的方法: equals方法用于比较两个对象是否相同,Objec ...

  9. java重写面试题_Java面试题:重写了equals方法,为什么还要重写hashCode方法?

    核心问题:重写了equals方法,为什么还要重写hashCode方法? 这不仅仅是一道面试题,而且是关系到我们的代码是否健壮和正确的问题.在前面两篇文章涉及到了equals方法的底层讲解:<说说 ...

  10. 重写equals()与hashCode()方法

    出自:http://blog.csdn.net/renfufei/article/details/16339351 Java语言是完全面向对象的,在java中,所有的对象都是继承于Object类.Oj ...

最新文章

  1. 强烈安利!这个私藏已久的神器!
  2. ITK:生成随机图片
  3. Shell脚本的学习笔记一:变量
  4. Java怎么重复使用套接字_在java中连续地通过套接字传输数据
  5. Gym 100090D Insomnia
  6. android 链接分享到朋友圈,android 分享到微信朋友圈或微信好友
  7. Mac OS 文件、文件夹重命名的方法
  8. python小结教学_Python Str内部功能-个人课堂笔记,课后总结
  9. 获取Linux的方法,CDN Linux系统中获取LDNS的方法
  10. 2021最新基于uniapp的计算机考研助手小程序(含管理端)
  11. 详解Unity的几种移动方式实现
  12. Erlang 游戏开发经验总结
  13. 【无题】2022-1
  14. anaconda查看环境中安装的包及具体位置查找
  15. 哪些技能,经较短时间的学习,就可以给人的生活带来巨大帮助?
  16. html js打印页边距,js 设立网页打印的页眉页脚和页边距
  17. Revit中添加水平仰视平面图及水平剖面
  18. centos 静态编译MP4box
  19. JS将对象数组按指定顺序排列
  20. 皮尔森相关性的相似度

热门文章

  1. CPU,缓存,内存,外存全解析
  2. 微信公众号推送天气(最近超火的小玩意)
  3. 单片机外部中断触发方式:电平触发和边沿触发两者说明
  4. paperswithcode使用方法
  5. Vue UI组件 开发框架 服务端 辅助工具 应用实例 Demo示例
  6. Unity3D 本地数据持久化记录存储
  7. Project Server 2016 部署
  8. ACM中的整数K拆分 (有条件限制 无条件限制 插板法 URAL-1036 HDU-6397)
  9. 《深入理解分布式事务》,初识分布式......
  10. 界面美化 —— 布局