第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方法进行比较。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容