第11条:覆盖equals时请遵守通常约定

自反性:对于任何非null的引用对象x,x.equal(x)必须返回true

对称性:对于任何非null的引用对象x、y,若x.equal(y)返回true,则y.equal(x)也必须返回true

传递性:对于任何非null的引用对象x、y、z,若x.equal(y)返回true,y.equal(z)返回true,则x.equal(z)返回true

一致性:对于任何非null的引用对象x、y,若x.equal(y)为true,在x、y都没有被修改过的情况下,无论调用多少次equal,都应该返回true

非null:对于任何非null的引用对象x,x.equal(null)都应该返回false



高质量equal要点:

    1.使用==判断传入的参数是否为这个对象的引用

    2.使用instanceof判断参数类型是否一致

    3.对参数进行强转,因为已经进行过instanceof判断,所以强转一定会成功

    4.检查类中定义的每个重要的字段,建议以一下方式对每个字段进行比较:

        a.除float和double的基本类型,使用==进行比较

        b.引用对象,递归调用equals方法

        c.float字段调用静态方法Float.compare(float,float)进行比较。非静态方法equal有相同的结果,但是会自动装箱导致性能损耗

        d.double字段调用静态方法Double.compare(double,double)进行比较。非静态方法equal有相同的结果,但是会自动装箱导致性能损耗

        e.数组字段的比较,对数组中的每个element进行比较,可以调用Arrays.equal方法进行比较。

你可能感兴趣的:(第11条:覆盖equals时请遵守通常约定)