1. 起因:字串恆等判斷
//String is reference type String str1 = new String("hello"); String str2 = new String("hello"); System.out.println(str1==str2); // false System.out.println(str1.equals(str2)); // true
線上學習影片分享:java線上學習
2. 關係運算子「==」
##重點:「==」只可以處理基本資料型別對應值的恆等判斷,不適用引用資料型別(其值存的是位址)
public class Main { public static void main(String[] args) { int n=3; int m=3; // true System.out.println(n==m); String str = new String("hello"); String str1 = new String("hello"); String str2 = new String("hello"); // false System.out.println(str1==str2); str1 = str; str2 = str; // true System.out.println(str1==str2); } }
Java中的8個基本資料型別
浮點型:float, double;整數型:byte, short, int , long; 字元型: char;布林型: boolean。 對於這8種基本資料類型的變量,變數直接儲存的是“值”,因此在用關係運算元==來進行比較時,比較的就是 “值” 本身。要注意浮點型和整數型都是有符號型的,而char是無符號型別的.
對於非基本資料型別的變數(引用型別),如String型別,引用類型的變數儲存的並不是「值」本身,而是與其關聯的物件在記憶體中的位址。如,str1並不是直接儲存的字串"hello",而是該物件所對應的位址。 因此在用==對str1和str2進行第一次比較時,得到的結果是false。因為它們分別指向的是不同的對象,也就是說它們實際儲存的記憶體位址不同。而在第二次比較時,str1和str2同時指向了str指向的對象,那麼得到的結果毫無疑問是true(位址相同)。3. Object方法「equals()」
equals方法是基底類別Object中的方法,因此對於所有的繼承於Object的類別都會有該方法。在Object類別中,equals方法是用來比較兩個物件的參考是否相等,即是否指向同一個物件.public class Main { public static void main(String[] args) { String str1 = new String("hello"); String str2 = new String("hello"); // true System.out.println(str1.equals(str2)); } }
小結:
對於==:如果作用於基本資料類型的變量,則直接比較其儲存的「值」是否相等; 如果作用於引用類型的變量,則比較的是所指向的物件的位址對於equals方法:如果沒有對equals方法進行重寫,則比較的是引用類型的變數所指向的物件的位址;諸如String、 Date等類別對equals方法進行了重寫的話,比較的是所指向的物件的內容(equals方法不能作用於基本資料類型的變數)。 更多相關文章教學請造訪:以上是java中字串恆等判斷的詳細內容。更多資訊請關注PHP中文網其他相關文章!