Effective Java Items about Methods Common to All Objects
设计Object类的目的是为了扩展,它所有的非final方法(equals, hashCode, toString, clone, finalize)都有着明确的通用约定,它们都被设计成要被覆盖的。任何一个类在覆盖这些方法时都要遵守一些通用规定。
Item 10: Obey the general contract when overriding equals
equals方法实现了等价关系,主要要满足以下条件:自反性,对称性,传递性,一致性,非空性。为了高效编写符合要求的equals方法,书中总结了以下方法:
1、使用==操作符检查参数是否是这个对象的引用。
2、使用instanceof操作符检查“参数是否为正确的类型”。
3、把参数转换成正确的类型。
4、对于该类中的每个“关键”域,检查参数中的域是否与该对象中对应的域相匹配。
5、编写好equals方法之后,再仔细检查是否满足之前的几个条件。
6、覆盖equals时要同时覆盖hashCode
7、不要企图让equals方法过于智能。
8、不要将equals声明中的Object对象替换为其他的类型。
Item 11: Always override hashCode when you override equals
每个覆盖了equals方法的类中,也必须同时覆盖hashCode方法。
Item 12: Always override toString
遵守toString的约定并不像遵守equals和hashCode的约定那么重要,但是提供好的toString实现可以使得类使用起来更为舒适。