Java自定义类中重写equals方法

博客介绍了Java中equals方法的自反性、对称性、传递性、一致性等要求,还提到子类定义equals方法时可用super.equals重载复写。同时指出重写equals方法通常要重写hashCode方法,并说明了原因,最后鼓励Java工程师学习提升。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

equals方法的要求:
a.自反性:对于任何非空的x,x.equals(x)都应该返回true
b.对称性:对于任何引用x和y,当且仅当x.equals(y)返回true时,y.equals(x)也应该返回true
c.传递性:对于任何引用x,y,z,如果x.equals(y)返回true,y.equals(z)返回true,那么x.equals(z)也应该返回true
d.一致性:如果x和y的引用没有发生变化,那么反复调用x.equals(y)的结果应该相同
e.对于任何非空的引用x,x.equals(null)应该返回false

public class A   
{   
       public boolean equals(Object otherObject)
  {
       //测试两个对象是否是同一个对象,是的话返回true
       if(this==otherObject) return true;
       //测试检测的对象是否为空,是就返回false
       if(otherObject==null) return false;
       //测试两个对象所属的类是否相同,否则返回false
       if(getClass()!=otherObject.getClass())  return false;
       //对otherObject进行类型转换以便和类A的对象进行比较
       A other=(A)otherObject;
       //对于值可能为null的属性,检测时应使用Object的equals方法,不为null的可以直接使用==检测
       return Object.equals(类A对象的属性A,other的属性A)&&类A对象的属性B==other的属性B……;
   }    
}

在子类定义equals方法时使用super.equals方法进行重载复写。
一般来说,重写了equals方法就同时也要重写hashCode方法

在这里插入图片描述

重写hashCode方法的原因

public int hashCode()
{  //其中Double根据需要换成所需类型,第一个乘数因子为素数(也叫质数)
   return 7*Object.hashCode(有可能为null的属性A)+
         11*new Double(不为null的属性B).hashcode()+
         ……
}

或者有更简单的方法

public int hashCode()
{
    return Object.hashCode(属性A,属性B,属性C,……);
}

That's all.

欢迎工作一到五年的Java工程师朋友们加入Java高并发: 957734884,群内提供免费的Java架构学习资料(里面有高可用、高并发、高性能及分布式、Jvm性能调优、Spring源码,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多个知识点的架构资料)合理利用自己每一分每一秒的时间来学习提升自己,不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值