java - equals()

一 equals 方法

equals() 是超类Object 中的一个方法,用来比较两个对象是否相等。

二 equals 和 ==

在 java 中所有的对象都有标识(内存地址)和状态(数据),使用未重写的 equals() 方法进行对象的比较 和使用 “==” 进行比较都是在比较两个对象的内存地址是否相等,而不是它们的状态(数据)是否相等。

未重写的 equals 方法的源码:

public boolean equals(Object obj) {
    return (this == obj);
}

如果我们想要实现对象之间数据的比较,那么我就应该要重写 equals 方法。在 JDK 中,String、Math 等都已经对 equals 进行了重写。所以我们在进行 String 的比较时,我们使用 equals 进行比较就是在对数据进行比较。

三 equals 的五大规则

  • 自反性
    任何非空引用值 x ,x.equals(x) 都返回 true
  • 对称性
    对于任何非空引用值 x 和 y,当 x.equals(y) 等于 true 时,y.equals(x) 也必须等于 true
  • 传递性
    对于任何非空引用值 x、y 和 z,如果 x.equals(y) 返回 true,并且 y.equals(z) 返回 true,那么 x.equals(z) 应返回 true
  • 一致性
    对于任何非空引用值 x 和 y,多次调用 x.equals(y) 始终返回 true 或始终返回 false,前提是对象上 equals 比较中所用的信息没有被修改
  • 对于任何非空引用值 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类型,然后使用==。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容