1.先初始化一个整形变量,为此变量赋予一个非零的常数值,比如int result = 17;

2.选取equals方法中用于比较的所有域,然后针对每个域的属性进行计算:

(1) 如果是boolean值,则计算f ? 1:0

(2) 如果是byte\char\short\int,则计算(int)f

(3) 如果是long值,则计算(int)(f ^ (f >>> 32))

(4) 如果是float值,则计算Float.floatToIntBits(f)

(5) 如果是double值,则计算Double.doubleToLongBits(f),然后返回的结果是long,再用规则(3)去处理long,得到int

(6)如果是对象应用,如果equals方法中采取递归调用的比较方式,那么hashCode中同样采取递归调用hashCode的方式。否则需要为这个域计算一个范式,比如当这个域的值为null的时候,那么hashCode值为0

(7)如果是数组,那么需要为每个元素当做单独的域来处理。如果你使用的是1.5及以上版本的JDK,那么没必要自己去重新遍历一遍数组,java.util.Arrays.hashCode方法包含了8种基本类型数组和引用数组的hashCode计算,算法同上,

还有就是:

1.hashcode相等,两个对象不一定相等,需要通过equals方法进一步判断;

2.hashcode不相等,两个对象一定不相等;

3.equals方法为true,则hashcode肯定一样;

4.equals方法为false,则hashcode不一定不一样。

Java重写hashcode方法相关推荐

  1. java重写hashcode方法代码_Java重写hashcode方法

    覆写hashcode 1. 把某个非零常数值,例如17,保存在int变量result中: 2. 对于对象中每一个关键域f(指equals方法中考虑的每一个 覆写hashcode 1. 把某个非零常数值 ...

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

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

  3. java equals重写原则_java中为何重写equals时必须重写hashCode方法详解

    前言 大家都知道,equals和hashcode是java.lang.Object类的两个重要的方法,在实际应用中常常需要重写这两个方法,但至于为什么重写这两个方法很多人都搞不明白. 在上一篇博文Ja ...

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

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

  5. Java重写equals方法时为什么要重写hashCode方法

    在我们平时编写Java代码时,重写equals方法时一定要重写hashCode方法,这是为什么呢? 在讨论这个问题前,我们先看下Object类中hashCode方法和equals方法. hashCod ...

  6. Java的重写equals但不重写hashCode方法的影响

    首先,说下equals和hashCode的关系.JDK API中关于Object类的equals和hashCode方法中说过,总结起来就是两句话:equals相等的两个对象的hashCode也一定相等 ...

  7. Java——重写hashCode()和euqals()方法

    1.顺序表的问题 查找和去重效率较低 对于这样的顺序表来说,如果需要查找元素,就需要从第一个元素逐个检查,进行查找.对于需要去重的存储来说,每次存入一个元素之前,就得将列表中的每个元素都比对一遍,效率 ...

  8. 为什么要重写hashcode()方法-(十万个为什么/Java)

    前言 十万个为什么之为什么要重写hashcode()方法??? equals比较的是对象的内容,==比较的是对象的地址. equals()和hashcode()都是属于超类(Object)类中的基本方 ...

  9. Java重写hashcode()与equals()方法

    一. hashCode 1. 基本概念 hashCode 是 JDK 根据对象的地址算出来的一个 int 数字(对象的哈希码值),代表了该对象再内存中的存储位置. hashCode() 方法是超级类 ...

最新文章

  1. HR只在这些时间里看你的简历!
  2. malloc 源码_UE4源码剖析:MallocBinned(上)
  3. dojo mobile问题汇总
  4. 【JAVA】家庭记账系统
  5. matlab标定工具安装,标定工具(matlab仿真工具)
  6. efm32芯片电压_【经验】基于EFM32G232芯片 ADC采样毛刺问题分析以及解决方案
  7. PhpMyWind储存型XSS漏洞练习(CVE-2017-12984)
  8. 优化源于99%的试验和1%的数据决策力
  9. (原创)直观了解通道混和器的校色作用
  10. 联想开机启动项按哪个_联想笔记本按哪个按键进入U盘启动|详解联想进入U盘启动的教程...
  11. 塑料壳上下扣合的卡扣设计_读书笔记-塑胶外壳卡扣设计
  12. 【用户画像】应用场景
  13. esp32学习笔记(4)——adc
  14. PHP从网站抓取图片并保存本地的代码
  15. python培训学校-上海python培训学校
  16. BSA分析拟南芥F2代分离群体混池测序
  17. appfuse3 生成代码
  18. 士兵队列训练问题(队列--先进先出)
  19. 求给定范围内的所有质数
  20. plsql批量导出、导入

热门文章

  1. 第一章 Java程序设计-开发入门1
  2. 易语言 代码编辑框 关键字高亮_易语言和SEO--易语言自然语言处理应用(一)...
  3. 外汇交易中的风险管理
  4. blackberry起步-图片滚动
  5. .net core .net6 Form Cookie Login 认证
  6. 如何将python代码生成exe小程序
  7. 2023上海国际电商物流包装产业展览会相约上海
  8. 06 数据结构与算法之哈希表(拉链法) (C语言实现)
  9. matlab canny算子原理,Canny算子边缘检测原理以及实现
  10. mysql longtext查询慢_select中的longtext使查询速度极慢