Effective Java 学习笔记(二)

类别:Java 点击:0 评论:0 推荐:
Effective java是美国Joshua Bloch所著,书中共十章57个条目,每个条目给出了一条用于改进程序性能和设计方案的规则。

第七条:在改写equals的时候请遵守通用约定
        约定的内容来自java.lang.object的规范:
        1、自反性(reflexive)。对于任意的引用值x, x.equals(x)一定为true。
        2、对称性(symmetric)。对于任意的引用值x和y,当且仅当y.equals(x)返回true时,x.equals(y)也一定返回true。
        3、传递性(transitive)。对于任意的引用值x、y和z,如果x.equals(y)返回true,并且y.equals(z)也返回true ,那么x.equals(z)也一定返回true。
        4、一致性(consistent)。对于任意的引用值x和y,如果用于equals比较的对象信息没有被修改的话,那么多次调用x.equals(y)要么一致地返回true,要么一致地返回false。
        5、对于任意的非空引用值x,x.equals(null)一定返回false。
        
        如何高质量实现equals方法:
        1、使用==操作符检查“实参是否为指向对象的一个引用”。如果是的话,返回true,这只不过一种性能优化,如果比较操作有可能非常耗时的话,这样做是值得的。
        2、使用instanceof操作符检查“实参是否为正确的类型”。如果不是的话,则返回false。通常,“正确的类型”是指equals方法所在的那个类。
        3、把实参转换到正确的类型。因为前面有了instanceof测试,所以这个转换可以确保成功。
        4、对于该类中每一个“关键(significant)”域,检查实参中的域与当前对象中对应的域值是否匹配。
        5、当你编写完成了equals方法后,应该问自己三个问题:它是否是对称的、传递的、一致的?
        6、当你改写equals的时候,总是要改写hashCode
        7、不要企图让equals方法过于聪明。
        8、不要是equals方法依赖于不可靠的资源。
        9、不要将equals声明中的object对象替换为其他的类型。

本文地址:http://com.8s8s.com/it/it12802.htm