目录

一、为什么需要重写equals和hasCode方法

二、equals和hasCode解读

1、equals方法

2、hasCode方法

三、重写

四、参考资料

一、为什么需要重写equals和hasCode方法

在我们需要比较对象是否相等时,我们往往需要采取重写equals方法和hashcode方法。因为如果不重写这些方法,那我们比较的就是对象在内存中的地址。即使两个对象实例的属性值都相等,比较返回的结果也不相等。比如:

Bean b1 = new Bean("haha");
Bean b2 = new Bean("haha");
System.out.println(b1==b2);//false

因为b1指向地址Address1,b2指向地址Address2。

二、equals和hasCode解读

1、equals方法

//源码
public boolean equals(Object object){return (this == obj);
}

equals: 默认调用的是Object的equals方法,看下面源码图,显然还是使用了== ,那就还是比较内存地址,那肯定是false了;

2、hasCode方法

hasCode:这是根据一定规则例如对象的存储地址,属性值等等映射出来的一个散列值,不同的对象存在可能相等的hashcode,但是概率非常小

规律:

  • 两个对象equals返回true时,hashCode返回肯定是true
  • 而两个对象hashCode返回true时,这两个对象的equals不一定返回true
  • 如果两个对象的hashCode不一样,那么这两个对象一定不相等

三、重写

模板类

public class Pig {private  String name;private Integer age;private String nickName;... }

重写equals方法:

 @Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Pig pig = (Pig) o;boolean nameCheck=false;boolean ageCheck=false;if (this.name == pig.name) {nameCheck = true;} else if (this.name != null && this.name.equals(pig.name)) {nameCheck = true;}if (this.age == pig.age) {ageCheck = true;} else if (this.age != null && this.age.equals(pig.age)) {ageCheck = true;}if (nameCheck && ageCheck){return true;}return  false;}

重写hasCode方法:

    @Overridepublic int hashCode() {int result = 17;result = 31 * result + name.hashCode();result = 31 * result + age;return result;}

也可以使用java 7自带的重写方法:

    @Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Pig pig = (Pig) o;return Objects.equals(name, pig.name) &&Objects.equals(age, pig.age);}@Overridepublic int hashCode() {return Objects.hash(name, age);}

四、参考资料

[1] Java 细品 重写equals方法 和 hashcode 方法_重写hashcode和equals方法_小目标青年的博客-CSDN博客

Java基础语法:重写equals方法和hasCode方法相关推荐

  1. HashSet要重写equals方法和hashCode方法

    注:重要笔记在代码中注释有 hashSet去重: 即判断两个对象是否相等 1:会先调用对象的hashCode方法获得hash的值,如果set中哈希表里面没有对应的hash值,则将次对象存入set中 2 ...

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

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

  3. JAVA正确地自定义比较对象---如何重写equals方法和hashCode方法

    在实际应用中经常会比较两个对象是否相等,比如下面的Address类,它有两个属性:String province 和 String city. public class Address {privat ...

  4. java中重写hashcode_Java中HashSet要重写equals方法和hashCode方法

    下面给出一个属性不同但哈希码相同的例子: import java.util.HashSet; import java.util.Iterator; import java.util.Set; clas ...

  5. 详解 equals() 方法和 hashCode() 方法

    来源:编程迷思, www.cnblogs.com/kismetv/p/7191736.html 前言 Java的基类Object提供了一些方法,其中equals()方法用于判断两个对象是否相等,has ...

  6. equals方法和hashCode方法之间的那些事(1.1)

    我们先来看一下java官方 jdk中关于equals方法和hashCode方法的介绍: 不知道读者们注意到一个细节没有,就是: 注意:当此方法被重写时,通常有必要重写 hashCode 方法,以维护 ...

  7. Java 回调函数(传统方法和lambda方法)-一个例子秒懂

    原文地址为: Java 回调函数(传统方法和lambda方法)-一个例子秒懂 背景: 想写一个工具类 Tool.java ,其中方法 public void readOneLine() 负责一行一行地 ...

  8. 普歌-码灵团队-java中的equals方法和toString方法及总结

    普歌-码灵团队:Object类中的方法介绍及其用法 一.Object类 二.方法介绍 1.toString方法 2.重写equals方法: 3. 拓展 三.总结 一.Object类的简单介绍 二.Ob ...

  9. 【Java基础】重写equals方法详讲

    一.重写equals方法 [Java比较学习]重写equals方法的安全写法 1.重写equals方法的两种方式 这里提供两个比较常见的equals重写方法: ● 用instanceof实现重写equ ...

最新文章

  1. MVC4做网站后台:模块管理1、修改模块信息
  2. Android RecyclerView 间距全适配
  3. mysql插入大量数据总结
  4. jquery获取当前的节点
  5. Oracle入门(十四.20)之创建DML触发器:第一部分
  6. 数据结构之栈与递归的实现及应用(斐波拉契数列递归解法和strlen递归解法)
  7. tomcat虚拟盘符映射
  8. python多继承顺序及分配,python多继承的查找顺序是什么?
  9. 几个关于oracle 11g ASM的问题
  10. ki4so-发起一个史上最开源的sso项目
  11. 惠普服务器硬件检测软件吗,惠普硬件检测工具DST HP PC Hardware Diagnostics UEFI 6.8.0.0 Rev.A 使用方法...
  12. 吉林省专升本历年真题高频词汇
  13. (附源码)SSM信用卡增值业务系统JAVA计算机毕业设计项目
  14. 九月十月百度人搜,阿里巴巴,腾讯华为小米搜狗笔试面试八十题(2012年度笔试面试八十题)
  15. win10开发环境搭建之wsl2(Ubuntu)+Terminal+docker
  16. Classifier Guided Diffusion
  17. Python,江湖救急
  18. 测试路由和设备连接速度的软件,如何简单,快速地在家中测试无线路由器的速度和性能?...
  19. ps磁性套索工具如何抠图
  20. matplotlib 基础_子图创建

热门文章

  1. UGUIImage透明渐变
  2. 【转载】Chrome插件在高版本浏览器中安装报错解决
  3. 数据结构作业-严蔚敏-5.3
  4. matlab 画图 白底黑字,白底黑字状态栏(详细使用步骤及各机型测试结果)
  5. 端到端流式语音识别研究综述——语音识别(论文研读)
  6. 全方位指导采集心事网络中的各种数据类型:Python网络数据采集
  7. 推荐系统(一) —— 好的推荐系统
  8. 教你 TypeScript 4.3 新功能的实践应用
  9. MySQL5.7.17 编译安装及二进制安装详解
  10. 英灵神殿服务器linux,Valheim英灵神殿Linux云服务器如何安装MOD?