1. 程式人生 > 實用技巧 >== 和 equals 的區別

== 和 equals 的區別

== 和 equals 的區別

== 對於基本資料型別來說,是用於比較
“值”是否相等的;而對於引用型別來說,是用於比較引用地址是否相同的。

檢視原始碼我們可以知道 Object 中也有 equals()  方法,原始碼如下:

public boolean equals(Object obj) {

    return (this == obj);

}

可以看出,Object 中的 equals() 方法其實就是 ==,而 String 重寫了 equals()
方法把它修改成比較兩個字串的值是否相等。

原始碼如下:

public boolean equals(Object anObject) {

    // 物件引用相同直接返回 true

    if (this == anObject) {

        return true;

    }

    // 判斷需要對比的值是否為 String 型別,如果不是則直接返回 false

    if (anObject instanceof String) {

        String anotherString = (String)anObject;

        int n = value.length;

        if (n == anotherString.value.length) {

            // 把兩個字串都轉換為 char 陣列對比

            char v1[] = value;

            char v2[] = anotherString.value;

            int i = 0;

            // 迴圈比對兩個字串的每一個字元

            while (n-- != 0) {

                // 如果其中有一個字元不相等就 true false,否則繼續對比

                if (v1[i] != v2[i])

                    return false;

                i++;

            }

            return true;

        }

    }

    return false;

}