通用于所有物件的函式
条款1:覆盖equals的要点:
1.以==检查如果时自身的引用,则会传true
2.以instance of检查是否为正确的类别,如果不是,返回false
3.将引数转换为正确的型别,由于时在instanceof后发生的,因此肯定成功.
4.对于class内的每一个有意义的fields,都要检查该对应属性是否吻合.如果这个型别是个interface,必须透过interface函数存取field
如果是个class,则可以直接存取那些fields(看是否可以直接存取).
对于非float和非double的基本feild,可以用==直接比较,对于引用类型,则用equals
对于float类型的,先用Float.floatToIntBits()转换为int值,再以==比较两个int值
对于double类型的,先用Double.doubleToLongBits()转换为long值,再以==比较两个long值
为了避免抛出NullPointerException,可以采用一下的手法加以比较
(field == null ? o.field == null: field.equals(o.field))
如果field和o.field经常是同一个object可以
(field == o.field ||(field !=null && field.equals(o.field)))
条款2:覆盖equals()是总是覆盖hashcode()
条款3:总是覆盖toString()