码迷,mamicode.com
首页 > 编程语言 > 详细

覆盖equals时请遵守通用约定——Effective Java 读书笔记

时间:2015-02-14 09:54:10      阅读:132      评论:0      收藏:0      [点我收藏+]

标签:java   effectivej   读书笔记   equals   

如果满足了以下任一条件,这就正是所期望的结果:
类的每个实例本质上都是唯一的。
不关心类是否提供了“逻辑相等”的测试功能。
超类已经覆盖了equals,从超类继承过来的行为对于子类也是适合的。
类是私有的或是包级私有的,可以确定它的equals方法永远不会被调用。

如果类具有自己特有的“罗吉相等”概念(不同于对象等同的概念),而且超类还,没有覆盖equals以实现期望的行为,这时我们就需要覆盖equals方法。

equals方法实现了等价关系:
自反性
对称性
传递性
一致性
非空性:对于任何非null的引用值x,x.equals(null)必须返回false

实现高质量equals方法的诀窍:
1、使用==操作符检查“参数是否为这个对象的引用”。
2、使用instanceof操作符检查“参数是否为正确的类型”。
3、把参数转换成正确的类型。
4、对于该类中的,每个“关键”域,检查参数中的域是否与该对象中对于的域相匹配。
5、当你编写完成了equals方法之后,应该问自己三个问题:它是否是对称的、传递的、一致的?

告诫:
覆盖equals时总要覆盖hashCode。
不要企图让equals方法过于智能。
不要将equals声明中的object对象替换为其他的类型。

覆盖equals时请遵守通用约定——Effective Java 读书笔记

标签:java   effectivej   读书笔记   equals   

原文地址:http://blog.csdn.net/lxf_44944/article/details/43815953

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!