首先分析使用==(注意:Java中= 是賦值運算符,== 是比較是否相等) 和equals()方法來比較兩個字串相等的差異:
==比較的是兩個字串的位址是否為相等(同一個位址),equals()方法比較的是兩個字串物件的內容是否相同(當然,若兩個字串引用同一個位址,使用equals()比較也回傳true)。
推薦相關學習影片:java影片
下面將舉出兩個例子,分析兩種情況下的字串比較問題:
範例1、使用new關鍵字宣告兩個String類型的變數
#執行程式發現,用equals比較回傳true,用== 比較傳回false。原因如下:
因為== 比較的是兩個字串物件的位址是否相同(是否為同一個位址),當使用new關鍵字建立一個物件的時候,該物件單獨佔據一塊儲存空間,存放llg這個字串的值。所以s1 s2兩個字串雖然值相同,但是儲存的位址不是一個位址。
當使用==來比較的時候,比較的是兩個字串的位址是否是同一個,所以回傳false。但使用equals()方法比較這兩個字串,將會比較兩個字串的值是否相同,所以回傳true。
範例2、正常情況下的字串宣告並定義
#程式經過運行,發現兩個方式都回傳true 。那麼這是為什麼呢?原因如下:
一般我們認為,堆疊中存放基本類型的變數和物件的參考變量,而new出來的物件和陣列則存放在堆中。然而除此之外還有一塊區域叫做常量池。像我們通常想String s1 = "abc"; 這樣申明的字串對象,其值就是儲存在常數池中。
當我們建立String s1 = "abc"
這樣一個物件之後,"abc"就儲存到了常數池中,當我們建立引用String s2 = "abc"
的時候,Java底層會優先在常數池中尋找是否存在"abc",如果存在則讓s2指向這個值,不會重新建立。所以使用 == 比較時,因為位址相同,所以比較的結果是true。
那麼問題回來了,既然是有常數池,是不是字串如果不是new出來的(一般也不會這麼new,宣告字串變數一般像例2這麼寫),那麼這些字串都是從常數池引用同一個對象,所以用== 比較就行了?答案是可以的。
推薦相關文章教學:java入門學習
#以上是java中如何使用if語句判斷字串是否相等的詳細內容。更多資訊請關注PHP中文網其他相關文章!