Java字串的String、StringBuilder、StringBuffer三者特性詳解

來源:互聯網
上載者:User

標籤:

一、不可變String類型

字串是電腦程式設計中的,最常見行為,Java的字串操作最主要的類是String,並且String對象是不可變的(Immutable),即對象一旦建立在記憶體中,那麼它的內容就不再改變。雖然String類中提供很多方法看起來像是可以修改String對象,比如trim()、subString()等等,但是實際上它們並沒有改變原來的字串對象,這些方法傳遞的只是引用的一個拷貝,所以重新建立了一個String類型的對象,並且有了新的引用。

例如下面一段代碼可以說明String的不可變特性:


package date0804.demo2;  public class ImmutableString {     public static void main(String[] args){                 String str=new String("xyz");        change(str);        System.out.println(str);    }         public static void change(String s) {        s="xml";    }}



其輸出結果為


str=xyz

因此,我麼可以看到每當把String對象作為方法的參數時,都會複製一份引用,而該引用所指的對象其實一直待在單一的物理位置上,從未改變過。

另外,String對象還支援+操作符,+操作符可以合并字串,但是根據相關的研究發現,使用+操作符來連接字串會使得效率下降,因而,涉及到字串的更改時,優先使用下面的StringBuilder或StringBuffer,二者都提供了豐富的字串處理命令。

二、StringBuilder類型

StringBuilder類型是一個可變的字串類型,StringBuilder類型的API與StringBuffer類型的API基本一致,唯一的區別是StringBuilder的使用假設在單一線程中,換句話說,StringBuilder是線程不安全的。StringBuilder在執行個體化的時候,通常也會預設設定一個容量大小,一般為字串參數的長度+16。StringBuilder是繼承AbstractStringBuilder這個抽象類別的,而這個抽象類別的內部使用字元數組來實現的,數組可以進行動態擴充。StringBuilder類提供的常用的方法有append()、insert()、replace()、deleteCharAt()、indexOf()、reverse()、toString()等方法,可以實現字串的增刪改查等準系統。


package date0812.demo1;public class Test3 {public static void main(String[] args) {StringBuilder stringBuilder = new StringBuilder("Eclipse");//添加stringBuilder = stringBuilder.append(" software");//容量int C = stringBuilder.capacity();//翻轉stringBuilder= stringBuilder.reverse();System.out.println(C);System.out.println(stringBuilder);}}運行結果:23erawtfos espilcE



三、StringBuffer類型

StringBuffer是一個可變的、安全執行緒的處理字串的類型。同樣,StringBuffer也是繼承AbstractStringBuilder抽象類別的,因此內部也是使用字元數組來儲存字串的。與StringBuilder的區別是,StringBuffer類型的絕大多數方法的修飾符都加上了關鍵字synchronized,包括length()、capacity()、trimToSize()、append()、delete()、insert()等等,這一方面表明StringBuffer是安全執行緒的,可以用於多線程並發的場合,所有對StringBuffer的並行作業都要按照一定的順序來執行,確保它們都能夠正確的執行;另一方面,也表明StringBuffer的開銷要比StringBuilder大一點。StringBuffer是要早於StringBuilder開發的,在單一線程中,可以使用StringBuilder來提高運行速度,如果遇到多線程需要同步時,則使用StringBuffer類型。其他的,在API的調用方面,基本上一模一樣。


Java字串的String、StringBuilder、StringBuffer三者特性詳解

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.