Java基礎之String、StringBuffer、StringBuilder的區別

上篇博客http://blog.csdn.net/u012483425/article/details/45999031 已經對String類盡心了詳細的說明。而java中與字符串常量String對應的還有兩個字符串變量類即StringBuffer和StringBuilder。本篇博客着重介紹一下三者的區別。

String

字符串常量,字符串的值在創建之後不可更改。

StringBuffer

字符串變量,線程安全的可變字符序列。一個類似於 String 的字符串緩衝區,但不能修改。雖然在任意時間點上它都包含某種特定的字符序列,但通過某些方法調用可以改變該序列的長度和內容。

可將字符串緩衝區安全地用於多個線程。可以在必要時對這些方法進行同步,因此任意特定實例上的所有操作就好像是以串行順序發生的,該順序與所涉及的每個線程進行的方法調用順序一致。

每個字符串緩衝區都有一定的容量。只要字符串緩衝區所包含的字符序列的長度沒有超出此容量,就無需分配新的內部緩衝區數組。如果內部緩衝區溢出,則此容量自動增大。從 JDK 5 開始,爲該類補充了一個單個線程使用的等價類,即 StringBuilder。與該類相比,通常應該優先使用 StringBuilder 類,因爲它支持所有相同的操作,但由於它不執行同步,所以速度更快。

常用方法爲append(),insert()方法。

StringBuilder

字符串變量,一個可變的字符序列。此類提供一個與 StringBuffer 兼容的 API,但不保證同步。該類被設計用作 StringBuffer 的一個簡易替換,用在字符串緩衝區被單個線程使用的時候(這種情況很普遍)。如果可能,建議優先採用該類,因爲在大多數實現中,它比 StringBuffer 要快。

將 StringBuilder 的實例用於多個線程是不安全的。如果需要這樣的同步,則建議使用 StringBuffer。

在 StringBuilder 上的主要操作是 append 和 insert 方法,可重載這些方法,以接受任意類型的數據。每個方法都能有效地將給定的數據轉換成字符串,然後將該字符串的字符添加或插入到字符串生成器中。append 方法始終將這些字符添加到生成器的末端;而 insert 方法則在指定的點添加字符。

總結

  1. 當處理少量的字符串數據是用String,單線程操作大量數據用StringBuilder,多線程操作大量數據用StringBuffer

    2.當使用”+”進行字符串的拼接時,加號會被編譯成StringBuilder或者StringBuffer,例如String d = a+b+c,new 一個StringBuilder對象,並進行了兩次append操作,再對StringBuilder對象進行toString操作,並返回給d。這時使用”+”號進行字符串拼接與StringBuilder,StringBuffer在性能上是差不多的,但是如果將上例放入循環當中,就會每循環一次,new 一個StringBuilder,這樣性能會大幅下降。

發佈了35 篇原創文章 · 獲贊 3 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章