Java中 Objects.equals()和==的区别

文章探讨了Java中对象比较的两种方式,Objects.equals()和默认的equals()方法。默认情况下,Objects.equals()和==比较的是对象的引用,但在String、Date等类中equals()已被重写用于比较内容。当自定义类时,需要重写equals()方法以比较对象内容,如示例中的ChangShi类。重写equals()的意义在于确保比较的是对象的属性值而非引用。
摘要由CSDN通过智能技术生成

一:使用默认Objects.equals()进行比较,将比较两个对象的地址,相同返回true,不同则false;

public class Main {
    public static void main(String[] args) {
        String c="111";
        int d=12;
        Person man=new ChangShi(c,d);//("姓名",id)
        Person woman=new ChangShi(c,d);
        System.out.println(man.equals(woman));//由于我们没有重写equals函数,所以这两行结果相同
        System.out.println(Objects.equals(man,woman));
    }
}
输出结果:false
         false

二:'=='默认比较地址,在String,Date,File等类中equals()方法进行了重写,并且调出Objects类源码如下

public static boolean equals(Object a, Object b) {
        return (a == b) || (a != null && a.equals(b));
    }
public class Main{
    public static void main(String[] args){
        String a=new String("111");
        String b="111";
        String c="111";
        int d=12;
        System.out.printf("a和b用'=='比较:%b\n",a==b);
        System.out.printf("a和b用'equals()'比较:%b\n",b.equals(a));
        System.out.printf("a和b用'Objects.equals()'比较:%b\n",Objects.equals(b,a));
    }
}
输出结果:false
         true
         true//根据Objects.equals()源码可知,会比较对象的地址并再次调用子类的重写equals()所以和上行结果相同,都是调用了String.equals()

三:重写equals()方法如下

重写的意义:将其原始的比较地址变为比较内容是否相同。

public class ChangShi {
   public String name;
    public int id;
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;//是本身就返回true
        if (o == null || getClass() != o.getClass()) return false;//为空或不是同类就返回false
        Person person = (Person) o;//将对象o强制转换为本类
        return id == person.id && Objects.equals(name, person.name);
//若都是基本类型,则直接判断返回即可,若为引用类型,则调用其引用类型(子类)的equals()方法
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值