equals

作者: jadefly | 来源:发表于2018-02-28 10:34 被阅读0次

     简介

    主要用于比较两个对象是否相等;

    源码

    注意:覆写equals()方法时,一般都是推荐使用getClass来进行类型判断,不是使用instanceof;

             (instanceof的作用是判断其左边对象是否为其右边类的实例,即非同类类型也可能返回true)


    equals 遵循规则

    1、自反性:对于任何非空引用值 x,x.equals(x) 都应返回 true。

    2、对称性:对于任何非空引用值 x 和 y,当且仅当 y.equals(x) 返回 true 时,x.equals(y) 才应返回 true。

    3、传递性:对于任何非空引用值 x、y 和 z,如果 x.equals(y) 返回 true,并且 y.equals(z) 返回 true,那么 x.equals(z) 应返回 true。

    4、一致性:对于任何非空引用值 x 和 y,多次调用 x.equals(y) 始终返回 true 或始终返回 false,前提是对象上 equals 比较中所用的信息没有被修改。

    5、 对于任何非空引用值 x,x.equals(null) 都应返回 false。


     比较方式选择

     1) 对象域,使用equals方法 。 

     2) 类型安全的枚举,使用equals或== 。

     3) 可能为null的对象域 : 使用 == 和 equals 。

     4) 数组域 : 使用 Arrays.equals 。

     5) 除float和double外的原始数据类型 : 使用 == 。

     6) float类型: 使用Float.foatToIntBits转换成int类型,然后使用==。

     7) double类型: 使用Double.doubleToLongBit转换成long类型,然后使用==。


    equals与hashcode

    如果x.equals(y)返回“true”,那么x和y的hashCode()必须相等。

    如果x.equals(y)返回“false”,那么x和y的hashCode()有可能相等,也有可能不等。

    判断两个对象是否相等一般流程:先比较hashcode(寻域),再比较equals

    1.hashcode不等,两个对象肯定不等;

    2.hashcode相等,equals不等,两个对象不等;

    3.hashcode相等,equals也相等,两个对象相等;

    相关文章

      网友评论

          本文标题:equals

          本文链接:https://www.haomeiwen.com/subject/sfcfbxtx.html