JAVA中的equals方法

本文深入解析Java中如何正确比较对象的相等性,解释为何不能用==比较引用类型,并提供equals方法的重写示例。

前言

在java中,判断基本类型是否相等可以用“==”来判断

那么判断引用型数据类型可以用“==”吗?不可以

public class Test {
    public static void main(String[] args) {
        date d = new date(2000,2,1);
        date c = new date(2000,2,1);
        if(c==d){
            System.out.println("d==c!");
        }else{
            System.out.println("d!=c");
        }
    }
}

输出结果为

d!=c的原因是:c,d的值都是一个date对象的地址,而不是date对象本身,而“==”比较的是c和d的值,又因为c和d指向的不是同一个对象,因此c和d的值是不一样的,所以输出了c!=d

因此java提供了equals方法来比较两个对象是否相等

 

Equals方法

 

equals方法源码

public boolean equals(Object obj){
    return (this == obj);

}

 

equals方法是object类里的一个方法,所有类里都有这个方法,但是观察源码我们可以发现,这个equals方法并不完善,它并不能根据对象里属性的值来比较两个类是否相等。因此我们需要重写它!

重写后的equals方法如下

public boolean equals(Object o) {
        if (this == o) return true; //若判断的对象是它本身则直接返回true

        //若判断的对象是null或者不是同一个类的对象则直接返回false
        if (o == null || getClass() != o.getClass()) return false;

        //因为object中的equals方法的参数是Object类型的引用,所以在重写时仍然必须要使用
        //Object作为参数类型,但是Object中无对应的属性,所以要进行向下转型
        date date = (date) o;
        return day == date.day &&
                month == date.month &&
                year == date.year;
    }

 

还有一个注意点是:String是一个类,是一个引用型数据类型,因此不能使用“==”来判断,必须要使用equals方法判断是否相等

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值