當使用==來判斷兩個變量是否相等時,如果兩個變量是基本類型變量,且都是數值類型(不一定要求資料類型嚴格相同),則隻要兩個變量的值相等,就将傳回true。
但對于兩個引用類型變量,隻有它們指向同一個對象時,==才會傳回true。==不可用于比較類型上沒有父子關系的兩個對象。
equals方法是Object類提供的一個執行個體方法,是以所有引用變量都可調用該方法來判斷是否與其他引用變量相等。但是Object類預設的equals方法與==運算符的實作相同。如下是Object類equals方法源碼。
public boolean equals(Object obj)
{
return this == obj;
}
這樣的比較沒有實際意義,要想自定義相等判斷标準就必須重寫equals方法,String類已經重寫了equals方法,隻要兩個字元串所包含的字元序列相同,equals方法将傳回true,否則傳回false。如下是String類equals方法源碼。
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String) anObject;
int n = value.length;
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = ;
while (n-- != ) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}