前言:
通常我們從後台取得 json 資料後都會轉成 String ,並解析其參數值拿來使用,而在使用前最好先判斷參數值是否存在或相同再做解析,這樣可以避免不可預期的錯誤(有可能資料本身就沒有帶到參數或參數打錯字等...)。而這時候大多數人都會想到用 == 或 Sting.equals()來做判斷,不過他們還是有些差異唷,以下我會用一些範例來說明 == 或 Sting.equals() 的差異。
1.==
== 其實是在判斷 stack 內的值,當兩個參考資料型別變數指向同一物件, == 運算子的結果會為 true; 且若兩個參考資料型別變數指向不同物件時,結果為 false。
2.equals
String 類別有提供 equals 這個方法如下方程式碼,先比較兩物件是否為相同類型的類別後在比較其內容值是否相同,是就回傳 true,否則回傳 false。
String.java
String.java
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 = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}
程式範例如下:
package pkg;
public class Main {
public static void main(String[] args) {
String s4 = new String("restful");
String s5 = new String("restful");
String s6 = new String("peaceful");
String s7 = s4;
String s8 = "restful";
String s9 = "restful";
System.out.println(s4.equals(s5)); //s4和s5所帶的值相同---true
System.out.println(s4.equals(s6)); //s4和s6所帶的值不相同----false
System.out.println(s4 == s5); //s4和s5各new了不同的記憶體空間----false
System.out.println(s4 == s7); //因為把s7指向了和s4所指向的同一個空間----true
System.out.println(s4 == s8); //因為s4 new了一個新空間,而s8則在字串池中---false
System.out.println(s8 == s9);
//s8和s9都在字串池中,為了節省記憶體空間,在字串池中,只要值相同,都會指向同一個記憶體空間-----true
}
}
沒有留言:
張貼留言