使用==比較String類型


String類型的比較

public class StringDemo { public static void main(String[] args) { String s1 = "abc"; String s2 = "abc"; String s3 = new String("abc"); System.out.println(s1 == s2);//true
    System.out.println(s1 == s3);//false
 } }

按照==的語法來看, 首先s1s2s3是三個不同的對象,常理來說,輸出都會是false。然而程序的運行結果確實truefalse。第二個輸出false可以理解,第一個輸出true就又讓人費解了。我們知道一些基本類型的變量和對象的引用變量都是在函數的棧內存中分配,而堆內存中則存放new 出來的對象和數組。然而除此之外還有一塊區域叫做常量池。像我們通常想String s1 = "abc"; 這樣申明的字符串對象,其值就是存儲在常量池中。當我們創建String s1 = "abc"這樣一個對象之后,"abc"就存儲到了常量池(也可叫做字符串池)中,當我們創建引用String s2 = "abc" 的時候,Java底層會優先在常量池中查找是否存在"abc",如果存在則讓s2指向這個值,不會重新創建,如果常量池中沒有則創建並添加的池中。這就是為什么答案是true false的原因。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM