覆写Object的equals对Objects中的equals方法的影响
程序员文章站
2024-03-08 08:09:51
...
Object的equals
Object的equals与Objects中的equals
最近学习JAVA到了equals,从开始object类中就提供了equals方法,JDK1.7中,新提供了一个java.util.Objects工具类,其中有 equals方法,该方法是空值安全的,及时null调用该方法,也不会报NullPointexception异常。
Object中的equals方法:
public boolean equals(Object obj) {
return (this == obj);
}
ObjectS中的equals方法:
public static boolean equals(Object a, Object b) {
return (a == b) || (a != null && a.equals(b));
}
覆写Object类中的equals方法
所有类都是Object类的子类,所以我们自定义一个Person类,也可以覆写equals方法。
典型覆写方法如下:
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Person person = (Person) o;
return age == person.age &&
Objects.equals(name, person.name);
}
这时,如果创建Person 的对象,比较两个对象的值,用 对象名称.equals(对象名称)去调用,就会用到覆写的equals方法。
如果不用这种方式呢?用Objects.equals(对象1,对象2)的方法呢?结果是否是会比较内容呢?
注意:我们是覆写的Object类中的equals方法,并不会覆写Objects类中的equals方法。
结果
如果new两个相同内容的Penson类,再覆写了object类中equals方法后,无论用是两种方式中的哪一种,都会得到True的返回值,如果不覆写,则会返回False(比较地址)。
对于第一种方式:对象名称.equals(对象名称),我 比较好理解,因为覆写了,就去调用覆写的方法。
对于第二种方式:Objects.equals(对象名称1,对象名称2)不太好理解,为啥没覆写,结果也是相同了呢?不是比较地址吗?
通过分析源码,找到根本原因
原来Objects类的equals方法中,还是调用了对象名称1.equals(对象名称2)的方法,因此覆写了Object类中的equlas方法,调用Objects的equals还是有影响的。
上一篇: PHP输出多个元素的排列或组合的方法
下一篇: Java调用cmd命令复制文件到指定目录