Java中,比較兩個字符串引用變量是否相等


下面的小程序用來判斷兩個字符串引用變量是否相等:

public class TestString {

   public static void main(String[] args) {

        String str1=new String("Hello Java!");

        String str2=str1;

        String str3="Hello Java!";

        String str4="Hello Java!";

       

        System.out.println(str1==str2);

        System.out.println(str1==str3);

        System.out.println(str3==str4);

   }

}

輸出結果:

true

false

true

 解析:

首先引用str1指向了一個內容為“Hello Java!”的字符串對象,然后把str1賦給str2,所以打印判斷str1==str2是true的因為他們存儲同一個地址值,接着隱含的創建了了字符串對象str3雖然st1與str3內容相同,但是他們是不同的對象,地址不同,所以打印str1= =str3結果是false。最后以同樣的方式創建了字符串str4為什么判斷str3==str4是true呢?由於字符串在程序中經常用到,Java為了加快程序的執行速度,把隱式創建的字符串對象放在棧中一個特殊區域—字符串池(String Pool)中,相同內容的字符串對象只保留一份,用引號新產生字符串對象時先從字符串池中尋找是否已經存在,若已經存在就取出來直接使用。而用new創建的字符串對象即使內容都是”Hello Java!”他們也是不同的對象實例,在內存中占不同的空間。


免責聲明!

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



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