不可變的字串(String)

來源:互聯網
上載者:User

標籤:java   使用   strong   io   cti   代碼   javascript   ar   

        一個字串String對象一旦被配置,其內容就是固定不可變的(immutable)。如下聲明:

      String str = "windows";


       這個聲明會配置一個長度為11的字串對象,您無法改變它的內容。看到下面的內容,我們別理所當然地認為就是改變一個字串對象的內容:

      String str = "java";
      str = "javascript";


      事實上,在段代碼中有兩個字串對象,一個是"java",長度為4,一個是"javascript",長度為10。這兩個是不同的字串對象,您並不是在 "java"字串後加上"script"字串,而是令str名稱指向新的字串對象,如下所示:

    原來指向此
    str ----> "java"

    重新指定後

    str-----> "javascript"
    引用新的字串對象


      在Java中,使用 = 將一個字串對象指定給一個名稱,其意義為改變名稱的引用對象,原來的字串對象若沒有其它名稱來引用它,就會適時地被Java的“記憶體回收”(Garbage collection)機制回收, 如若在程式中使用下面的方式聲明,則就是指向同一個字串對象:

    String str1 = "number";
    String str2 = "number";
    System.out.println(str1 == str2);


      代碼的執行結果會顯示true。在Java中會維護一個String Pool,對於一些可共用的字串對象,會先在String Pool中尋找是否存在位元組相同的String內容,如果有就直接傳回,而不是直接建立一個新的String對象,以減少記憶體的耗用。

  注意到了嗎?== 運算在Java中被用來比較兩個名稱是否指向同一對象,所以不可以用==來比較兩個字串的內容是否相同,例如:

    String str1 = new String("cubic");
    String str2 = new String("cubic");
    System.out.println(str1 == str2);


  上面會顯示false的結果,因為str1與str2是分別指向不同的字串對象,如果要比較兩個(字串)對象是否相同,您要使用equals()方法,例如:

    String str1 = new String("cubic");
    String str2 = new String("cubic");
    System.out.println(str1.equals(str2));


  這樣子結果才會顯示所想要的比較結果:true。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.