equals方法

来源:互联网 发布:网络发帖兼职 编辑:程序博客网 时间:2024/05/22 21:35

定义

Object类中的equals方法用于检测一个对象是否等于另一个对象。在Object类中,这个方法将判断两个人对象是否具有相同的引用。如果两个对象具有相同的引用,它们一定是相等的。

特性

  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)应该返回同样的结果。
  5. 对于任意非空引用x,x.equals(null)应该返回false。

警告
下面是实现equals方法的一种常见的错误。

    public class Employee    {        public boolean equals(Employee other)        {            return Objects.equals(name, other.name) && salary == other.salary && Objects.equals(hireDay, other.hireDay);        }    }
  • 这个方法声明的显示参数类型是Employee、其结果并咩有覆盖Object类的equals方法,而是定义了一个完全无关的方法。

  • 为了避免发生类型错误,可以使用@override对覆盖超类的方法进行标记: @override public boolean
    equals(Object other)

  • 如果出现了错误,并且正在定义一个新方法,编译器就会给出错误报告。例如,假设下面的声明添加到Employee类中: @override
    public boolean equals(Employee
    other)就会看到一个错误报告,这是因为这个方法并没有覆盖超类Object中的任何方法。

用法

  1. static Boolean equals(type[] a,type[] b)
    如果两个数组长度相同,并且在对应的位置上数据元素也均相同。将返回true。数组的元素类型可以是Object、int、long、short、char、byte、boolean、float或double。

  2. static Boolean equals(Object a,Object b)
    如果a和b都为null,返回true;如果只有其中之一为null,则返回false;否则返回a.equais(b)。