Effictive Java学习笔记(1)-------对于所有对象都通用的方法

一.覆盖equals时请遵守通用约定

1.可以不覆盖euqals方法的情况

覆盖equals方法看起来似乎简单,但是有许多覆盖方式会导致错误,并且后果非常严重,最容易避免这类问题的办法就是不覆盖equals方法。
如果满足一下任何一个条件,则可以不需要覆盖equals方法。
类的每一个实例都是唯一的。
不关心类是否提供了“逻辑相等”的测试功能。
父类已经覆盖类equals,从父类继承过来的行为对子类也是合适的。
类是私有的或者包级私有的,可以确定它的equals方法永远不会被调用。
枚举类也不需要覆盖equals方法,因为每一个值最多存在一个对象

2.覆盖equals方法需要遵守的约定

自反性

对于任何非空的引用值x,x.equals(x)必须返回true。

对称性

对于任何非空的引用值x和y,当且仅当y.equals(x)返回true时,x.equals(y)必须返回true。

传递性

对于任何非空的引用值x,y和z,如果x.equals(y)返回true,并且y.equals(z)也返回true,那么x.equals(z)也必须返回true。

一致性

对于任何非空的引用值x和y,只要equals的比较操作在对象中所用的信息没有被修改,则多次调用x.equals(y)返回结果一致。

非空性

对于任何非空的引用x,x.equals(null)必须返回false。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值