一、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方法比较两个对象的内存地址是否相等。