重写equals方法时必须重写hashcode

有规范:
1,当obj1.equals(obj2) 为 true 时,obj1.hashCode() == obj2.hashCode()

2,当obj1.equals(obj2) 为 false 时,obj1.hashCode() != obj2.hashCode()

原因:
如果只重写了equals方法,



出现了问题,两个对象equals方法比较为true,但是hashcode值不相等,违背了规范。
hashmap中存储数据时,先调用hashCode,唯一则存储,不唯一则再调用equals,结果相同则不再存储,结果不同则散列到其他位置。
如果我们将对象的equals方法重写而不重写hashcode,当我们再次new一个新的对象的时候,equals方法返回的是true,但是hashCode方法返回的就不一样了,如果需要将这些对象存储到结合中(比如:Set,Map …)的时候就违背了原有集合的原则

总结:
1、两个对象,用==比较比较的是地址,需采用equals方法(可根据需求重写)比较
Object类源码:

  public boolean equals(Object obj) {return (this == obj);}

2,重写equals()方法就重写hashCode()方法。

3,一般相等的对象都规定有相同的hashCode。

4,String类重写了equals和hashCode方法,比较的是值。

5,重写hashcode方法为了将数据存入HashSet/HashMap/Hashtable(可以参考源码有助于理解)类时进行比较

重写equals方法时必须重写hashcode方法吗相关推荐

  1. 为什么重写equals方法时必须重写hashcode方法

    文章目录 1. == 与 equals的区别 2. 重写equals() 3. 为什么重写equals方法时必须重写hashcode方法? 3.1 Hash算法 3.2 HashCode() 相关文章 ...

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

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

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

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

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

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

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

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

  6. 面试官:重写 equals 时为什么一定要重写 hashCode?

    作者 | 磊哥 来源 | Java面试真题解析(ID:aimianshi666) 转载请联系授权(微信ID:GG_Stone) 重要说明:本篇为博主<面试题精选-基础篇>系列中的一篇,关注 ...

  7. 为什么重写equals方法时,要求必须重写hashCode方法?

    1 equals方法 Object类中默认的实现方式是  :   return this == obj  .那就是说,只有this 和 obj引用同一个对象,才会返回true. 而我们往往需要用equ ...

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

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

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

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

最新文章

  1. DOM渲染的详细过程
  2. [HNOI2011]数学作业 分段矩阵乘法
  3. 笔记: 环境 - Postgre从安装到使用
  4. 21 RadioGroup ListFragment
  5. Java案例:编译器生成桥方法
  6. 数据结构与算法python—8.递归及leetcode总结
  7. adb.exe可能被其他程序关闭_苹果说关闭后台 反而会缩短电池寿命?!
  8. Atitit 数据库 负载均衡 方法总结 目录 1. 对称模型负载均衡 vs 非对称模型 2 1.1. 业务分离法 2 1.2. App + db分布式分离法 2 2. 负载均衡算法 2 2.1.
  9. C#多线程之线程同步篇2
  10. php seek_cur,Golang中seek使用方法详解
  11. 安全左中右·2022 XDR 网络安全运营新理念峰会圆满落幕
  12. Ubuntu学习NO5.高效工作方式
  13. Flink之DataSet转换操作(二)
  14. 百度云上传本地图片到对象存储BOS——python版
  15. 阴阳师夜刀神技能是什么
  16. 在网吧想免费上网又何不自己动动手呢?
  17. jquery停止全部音频播放
  18. 【运筹学】对偶理论 : 影子价格 ( 对偶问题的经济解释 )
  19. win10如何调整计算机时间同步,win10系统调整设置时间同步的频率的操作方法
  20. Java极简角色权限后台管理框架springboot manager

热门文章

  1. Uploadify v3.2.1
  2. 解决mysqlAccess denied for user'root'@'IP地址'问题
  3. 练习PYTHON之EPOLL
  4. SpringMVC下的基本配置
  5. 二分搜索 POJ 3273 Monthly Expense
  6. Android中进程间通讯 AIDL
  7. django模板中使用JQ代码实现瀑布流显示效果
  8. 一文读懂TOF深度相机技术原理--TI-Tintin-OPT8241二次开发和应用系列--Theory Level
  9. c#listView
  10. [bzoj2324][ZJOI2011]营救皮卡丘