您的位置:

Java中的equals方法

一、equals方法的作用和用法

equals方法是所有Java类继承自Object类的方法,在Java中用于判断两个对象是否相等。如果需要判断自定义的类的对象是否相等,就需要重写该方法。

重写equals方法的方法签名应该与Object类中的equals方法相同,参数为Object。当两个对象相等时返回true,否则返回false。另外,在重写equals方法时,也需要重写hashCode方法。

@Override
public boolean equals(Object o) {
    if (this == o) return true;
    if (o == null || getClass() != o.getClass()) return false;
    MyClass myClass = (MyClass) o;
    return x == myClass.x &&
            Objects.equals(s, myClass.s);
}

@Override
public int hashCode() {
    return Objects.hash(x, s);
}

二、重写equals方法的注意事项

当需要重写equals方法时,一些注意事项需要遵守:

1、判断传入的对象是否为null或者与该对象属于不同的类,如果是则返回false。

2、如果两个对象在比较中需要用到equals方法,则需要保证这两个对象中涉及的所有字段都重写了equals方法,并且这些方法的判断逻辑一致,否则可能会导致判断错误。

3、在重写equals时要考虑到对象的所有字段,这里的所有指的是所有公有和私有字段,包括final字段。如果不考虑final字段,则可能导致重写的equals方法在某些情况下出现问题。

三、equals方法和==号的区别

equals方法和==号的区别:

1、equals方法是用来比较两个对象是否相等的,而==号是用来比较两个对象的内存地址是否相等。

2、对于基本类型的比较,==号比较的是数值的大小是否相等,而不是内存地址。比如说 int a = 5; int b = 5; a == b的结果是true。

3、对于包装类型的对象比较,==号比较的是对象的引用是否相等,而equals方法比较的是对象的数值是否相等。

由于equals方法可以被重写,所以在某些情况下,也可以使用equals方法比较两个对象的内存地址是否相等。