| 
         
     
     | 
     | 
    
  
    | 
    Effective Java 学习笔记(二) | 
   
  
     | 
   
  
     | 
   
  
    | 
     作者:未知  来源:月光软件站  加入时间:2005-2-28 月光软件站  | 
   
  
    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对象替换为其他的类型。 
 
  | 
   
  
     | 
   
  
     相关文章:相关软件:  | 
   
   
      |