千家信息网

Java如何自定义实现equals()方法

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章主要介绍了Java如何自定义实现equals()方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。以常见的自定义Date类型为
千家信息网最后更新 2026年11月03日Java如何自定义实现equals()方法

这篇文章主要介绍了Java如何自定义实现equals()方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

以常见的自定义Date类型为例,没有经验的朋友可能会觉得直接比较年月日即可,从而写出以下的实现

public class MyDate implements Comparable { private final int year; private final int month; private final int day; public MyDate(int year, int month, int day) { this.year = year; this.month = month; this.day = day; } @Override public int compareTo(MyDate o) { throw new NotImplementedException(); } public boolean equals(Date that) { if (this.day != that.day) { return false; } if (this.month != that.month) { return false; } if (this.year != that.year) { return false; } return true; }}

但是想要健壮地实现equals()方法,上述代码是不够的,参考以下代码

//定义为final类型:允许子类直接使用父类equals()方法是不安全的public final class MyDate implements Comparable { private final int year; private final int month; private final int day; public MyDate(int year, int month, int day) { this.year = year; this.month = month; this.day = day; } @Override public int compareTo(MyDate o) { throw new NotImplementedException(); } @Override //规定参数必须是Object类型 public boolean equals(Object obj) { //检查是否相同引用 if (obj == this) { return true; } //检查null if (obj == null) { return false; } //getClass()判断的是准确的运行时类型,instanceof的类型可以是父类或接口 if (obj.getClass() != this.getClass()) { return false; } //这里类型转换一定是安全的 MyDate that = (MyDate) obj; //确认关键字段都相等 if (this.day != that.day) { return false; } if (this.month != that.month) { return false; } if (this.year != that.year) { return false; } return true; }}

自定义equals方法的套路

检查是否是同一个引用,如果是,返回true检查null值,如果是,返回false检查类型是否相同,如果不同,返回false;如果相同,进行类型转换

对每个关键字段进行比较:

4.1 如果字段是基本类型,使用==

4.2 如果字段是对象类型,使用对象的equals()方法

4.3 如果字段是个数组,比较数组的每个元素。可以考虑使用Arrays.equals(a,b)或者Arrays.deepEquals(a,b),但不是a.equals

(b)

建议

如果一个字段的值完全依赖其他字段的值,可以不用比较优先比较最可能出现差异的字段如果对象实现了compareTo()方法,可以直接拿来使用。例如x.compareTo(y) == 0

感谢你能够认真阅读完这篇文章,希望小编分享的"Java如何自定义实现equals()方法"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!

类型 字段 方法 检查 篇文章 相同 对象 安全 代码 关键 朋友 参考 不同 健壮 不够 不用 个数 价值 元素 兴趣 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 小米移动互联网科技园 互联网最新的科技 厦门中拓互联网络科技有限公司 互联网巨头反垄断金融科技 奇士达互联网科技 西藏七维空间互联网科技有限公司 中盈科技互联网信息有限公司 哈尔滨新华互联网科技学院 阿里巴巴算科技企业还是互联网 互联网系的金融科技公司 河南猎农互联网科技有限公司 互联网科技与大数据专业 速维有品互联网信息科技(苏州)有限公司 米聚互联网科技南京有限公司排面 迪庆互联网科技招生 江苏苏星互联网科技有限公司 城市宝互联网科技有限公司 山东大美朱楼互联网科技有限公司 上海乐五互联网科技有限公司 互联网科技创新方面的资料 互联网络科技 高科技互联网 互联网科技视频 猫创互联网科技 济南和联互联网科技有限公司 互联网科技寓意 知域互联网科技有限公司大骗子 迪庆互联网科技招生 世界互联网科技成果奖 科技美学互联网 艺术
0