Java中 == 與 equals()區別

對於測試兩個變量是否相等有兩種方式,==和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;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章