对于 Java 中的普通对象重写 equals(Object obj) 方法的一些注意点

本文探讨了在Java中如何正确重写Object类的equals(Object obj)方法,包括判断对象引用相等性、类类型匹配以及比较对象内部数据的注意事项。建议使用Objects.equals()来处理引用类型,根据子类和超类的需求选择覆盖还是实现equals()方法。
摘要由CSDN通过智能技术生成

对于判断两个类对象是否相等的一般思路

  1. 判断是否引用的是同一个对象:this == obj
  2. 判断 obj 这个对象实例是否为 null
  3. 通过 getClass() == obj.getClass()obj instanceof 超类 判断是否是同一个类,这里的 超类 是指 thisobj 共同的超类
  4. 判断 thisobj 对象实例中的数据信息是否相同
    ps: 对于基本数据类型,使用 == 进行判断,对于引用数据类型使用 equals 进行判断,建议使用Objects.equals(Object o1, Object o2),这样可以处理调用者null 的情况

对于选择 getClass() == obj.getClass()obj instanceof 超类 来判断相等的时机

  • 如果子类拥有自己的相等概念,即对于相等的需求是细化到子类的数据信息,则使用 getClass() == obj.getClass() 来进行判等。
  • 如果由超类决定相等的概念,即只需要保证超类中的数据信息相等即可,则使用 obj instanceof 超类 来进行判断

简单示例

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值