天天看點

==和equals方法有什麼差別?

當使用==來判斷兩個變量是否相等時,如果兩個變量是基本類型變量,且都是數值類型(不一定要求資料類型嚴格相同),則隻要兩個變量的值相等,就将傳回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;
    }
           

繼續閱讀