Java学习--Equals与“==”

  在Java规范中,它对equals()方法的使用必须要遵循如下几个规则:

  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。

  在java中进行比较,我们需要根据比较的类型来选择合适的比较方式:

     1) 对象域,使用equals方法 。 
     2) 类型安全的枚举,使用equals或== 。 
     3) 可能为null的对象域 : 使用 == 和 equals 。
     4) 数组域 : 使用 Arrays.equals 。
     5) 除float和double外的原始数据类型 : 使用 == 。
     6) float类型: 使用Float.foatToIntBits转换成int类型,然后使用==。  
     7) double类型: 使用Double.doubleToLongBit转换成long类型,然后使用==。

覆写equals时推荐使用getClass进行类型判断。而不是使用instanceof

原文地址:https://www.cnblogs.com/liutoutou/p/3532501.html