對於測試兩個變量是否相等有兩種方式,==和equals(),前者是運算符,而後者是對象的方法。
一、==
如果兩個變量是基本類型的,且都是數值類型,兩個變量的值相等,則返回true;
如果兩個 變量是引用類型的,只有它們指向同一個對象時,返回結果纔是true,此時比較的是兩個對象的地址是否相等。
二、equals()
該方法在Object對象中,任何java對象皆繼承Object對象,所以所有對象中都有equals()方法,
Object類equals()方法的實現:
public boolean equals(Object obj) {
return (this == obj);
}
通過源碼我們看一看到,equals()方法的底層是用==實現的,也就是同樣只有兩個引用變量指向同一個對象時才返回true。
到這裏我們可能會發現,提供的equals()方法並沒有太大的實際意義。但是不要忘了,方法是可以重寫的哦,也就是說我們可以根據自己的相等標準來自定義相等。
在String中,就已經重寫了equals()方法,不再是僅僅判斷兩個引用變量是否指向同一個對象,並且當兩個字符串的內容相同時也返回true。
String類equals()方法的實現(方法已經被重寫):
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = length();
if (n == anotherString.length()) {
int i = 0;
while (n-- != 0) {
if (charAt(i) != anotherString.charAt(i))
return false;
i++;
}
return true;
}
}
return false;
}