Java基础-Equals

Java基础-Equals

0.Java语言规范:equals

为了看的快一些 以下 equals 简写成 == ,以下abc包括abd及abc的引用

  1. 自反性: a==a (a非空)
  2. 对称性: 如果ab, 那么ba
  3. 传递性: 如果 ab,bc,那么a==c
  4. 一致性: 如果a、b不发生变化 那么 a==b的判断结果也不发生变化
  5. 对于任意非空引用x,x.equals(null) 应该返回false。

完美解决方法

1.如果子类可以决定两个对象是否相等,用getClass去比较
  1. if (this == obj) return true;
  2. if (obj == null) return false;
  3. if (getClass() != obj.getClass()) return false;
  4. ClassName other = (ClassName) obj;
用来决定是否两个对象是否相等,如下判断是 目标相等域 的相等判断。
return 基础类型feild == other.基础类型feild
                && 对象类型feild.equals(other.对象类型feild)
                && .......   ;
注意:如果子类想要重写equals,需要调用 super.equals(obj)
2.如果超类来决定两个对象是否相等,用instanceof去比较(instanceof兼容子类),并且添加final,使子类无法重写equals
  1. if (this == obj) return true;
  2. if (obj == null) return false;
  3. if (!(obj instanceof Employee)) return false;
  4. ClassName other = (ClassName) obj;
和上面一样,根据你想要相等的域 进行相等判断
return 基础类型feild == other.基础类型feild
                && 对象类型feild.equals(other.对象类型feild)
                && .......   ;

利用雇员和经理的例子可以解释改知识点:
经理 extends 雇员

第一种情况的例子:
经理和普通雇员不能相比较,两个经理比较,名字,职位等等都一样,只有分红不一样,那么就算两个对象不相同。普通雇员也是如此可以比较。
第二种情况的例子:
不管是经理还是普通雇员可以相互比较。只要是id不一样,就是两个不同的对象。

看Java核心(第十版) equals的总结。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值