前言:
通常我們從後台取得 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 } }
沒有留言:
張貼留言