java中Objects.equals()与equals()方法比较

本文深入探讨了Java中Objects.equals()方法与传统的equals()方法的区别,通过实例解析它们的使用场景和注意事项,是理解这两种方法的关键。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先举一个例子:
也可以说是详解了!(划重点,要考!

package Demo2;
import java.util.Objects;
public class Demo {
    public static void main(String[] args) {
        
        Person p = null;
        Person p1 = new Person();

        System.out.println(p.equals(p1));
        /*错误,报空指针异常NullPointerException
        原因: p的引用地址为空,根本就不能调用equals方法,显示空指针异常
        */
        
        System.out.println(Objects.equals(p,p1));
        /* 正确。
        Objects.equals(p,p1)方法,的源代码如下:
          public static boolean equals(Object a, Object b) {
          return (a == b) || (a != null && a.equals(b));
        重点:||右侧:先判断第一个数是否为空,如果为空则直接返回false ,
                    如果不能空,则调用equals方法,继续判断。
    }
         */
    }
}

package Demo2;
import java.util.Objects;
public class Person {
    
     String name;

    //重写的equals方法用来比较对象中的内容,不重写equals则采用隐藏的默认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 Objects.equals(name, person.name);
    }
}

下面是更深一层的解析了:
在这里不重复写Person类了,上面有。

package Demo2;

public class Test1 {
    public static void main(String[] args) {

        Person p1 = new Person();
        p1.name = null;
        Person p2 = new Person();
        p2.name = "王五";

        System.out.println(p1.equals(p2)); //false
        /*为什么返回false
        原因:首先p1是不为空的,能调用equals方法
            重写的equals方法比较的是内容(在这里是比较name里面的内容)
            看重写的equals方法最后一行是这样写的:
            return Objects.equals(name, person.name);
            重新调用了Objects.equals方法:即便p1.name的引用地址为空,
            他也能进行比较,大不了直接返回false,不继续判断后面的内容了。
            如果p1.name = "王五",这个引用地址是不为空的,而且指向同一个
            字符串常量池的存储位置,则他们两内容相同!
         */
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值