我們來介紹一下 ==和equals()的區(qū)別,==是相等,equals()也是相等。這兩個詞的區(qū)別是什么呢?這是找工作時很多面試官的問題。我們來解答一下。首先我們看這么個例子。實踐:
public class TestEquals {
public static void main(String[] args) {
MyDate date1 = new MyDate(14, 3, 1976);
MyDate date2 = new MyDate(14, 3, 1976);
if ( date1 = = date2 ) {
System.out.} else {
System.out.println("date1 is not identical to date2");
}
if ( date1.equals(date2) ) {
System.out.println("date1 is equal to date2");
} else {
System.out.println("date1 is not equal to date2");
}
System.out.println("設(shè) date2 = date1;");
date2 = date1;
if ( date1 == date2 ) {
System.out.println("date1 is identical to date2");
} else {
System.out.println("date1 is not identical to date2");
}
}
}
這個例子中的MyDate類代碼如下
public class MyDate {
private int day;
private int month;
private int year;
public MyDate(int day, int month, int year) {
this.day = day;
this.month = month;
this.year = year;
}
public boolean equals(Object o) {
boolean result = false;
if ( (o != null) && (o instanceof MyDate) ) {
MyDate d = (MyDate) o;
if ( (day == d.day) && (month == d.month)
&& (year == d.year) ) {
result = true;
}
}
return result;
}
public int hashCode() {
return (day ^ month ^ year);
}
}
將這兩個類放置到同一個文件夾中,只需要編譯TestEquals類,就可以將MyDate一同編譯了。然后執(zhí)行java TestEquals查看結(jié)果。如圖28-1所示
圖28-1
也就是說date1 = = date2 雖然都是new MyDate(14, 3, 1976);但是new了兩次就是兩個對象了,不能==了。==是指引用是否相同。
那么用equals()呢,equals()是Object里的方法,任何對象都繼承Object。所以equals()方法也適用于所有的類。為什么這回date1和date2就equals了呢?equals()是指值是否相等。因為都是(14,3,1976)所以相等。
我們把date1賦值給date2,結(jié)果當然是==了,都已經(jīng)把引用賦給它了。還能不==嗎?
新聞熱點
疑難解答