首先分析使用==(注意: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中文網其他相關文章!

本文討論了各種Java垃圾收集算法(串行,並行,CMS,G1,ZGC),它們的性能影響和適合大量堆的應用。

本文討論了Java虛擬機(JVM),詳細介紹了其在不同平台運行Java程序中的作用。它說明了JVM的內部流程,密鑰組件,內存管理,垃圾收集和性能Optimizatio

Java的Nashorn Engine可以在Java應用程序中啟用JavaScript腳本。關鍵步驟包括設置Nashorn,管理腳本和優化性能。主要問題涉及安全性,內存管理和未來兼容性

Java的Try-with-Resources通過自動關閉文件流或數據庫連接等資源來簡化資源管理,從而提高代碼可讀性和可維護性。

Java枚舉代表固定的值集,通過自定義方法和構造函數提供類型安全性,可讀性和其他功能。它們增強了代碼組織,可用於開關語句中以進行有效的價值處理。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

Atom編輯器mac版下載
最受歡迎的的開源編輯器

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

Dreamweaver Mac版
視覺化網頁開發工具

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

WebStorm Mac版
好用的JavaScript開發工具