覆盖equals时请遵守通用约定——Effective Java 读书笔记
如果满足了以下任一条件,这就正是所期望的结果:
类的每个实例本质上都是唯一的。
不关心类是否提供了“逻辑相等”的测试功能。
超类已经覆盖了equals,从超类继承过来的行为对于子类也是适合的。
类是私有的或是包级私有的,可以确定它的equals方法永远不会被调用。
如果类具有自己特有的“罗吉相等”概念(不同于对象等同的概念),而且超类还,没有覆盖equals以实现期望的行为,这时我们就需要覆盖equals方法。
equals方法实现了等价关系:
自反性
对称性
传递性
一致性
非空性:对于任何非null的引用值x,x.equals(null)必须返回false
实现高质量equals方法的诀窍:
1、使用==操作符检查“参数是否为这个对象的引用”。
2、使用instanceof操作符检查“参数是否为正确的类型”。
3、把参数转换成正确的类型。
4、对于该类中的,每个“关键”域,检查参数中的域是否与该对象中对于的域相匹配。
5、当你编写完成了equals方法之后,应该问自己三个问题:它是否是对称的、传递的、一致的?
告诫:
覆盖equals时总要覆盖hashCode。
不要企图让equals方法过于智能。
不要将equals声明中的object对象替换为其他的类型。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。