前言
在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方法判断是否相等
本文深入解析Java中如何正确比较对象的相等性,解释为何不能用==比较引用类型,并提供equals方法的重写示例。
2786

被折叠的 条评论
为什么被折叠?



