equals

 简介

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

equals_第1张图片
源码

注意:覆写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)