1. 程式人生 > 其它 >白話說String,StringBuffer,StringBuilder

白話說String,StringBuffer,StringBuilder

啥是String,StringBuffer,StringBuilder??

  • String :字串常量字串長度不可變!!

注:所有對String的操作最終返回的都是一個新的String,原字串並沒有變。

  • StringBuffer :字串變數(Synchronized,即執行緒安全),如果要頻繁對字串內容進行修改,出於效率考慮最好使用StringBuffer,如果想轉成String型別,可以呼叫StringBuffer的toString(); StringBuffer上的主要操作是append和insert方法,可過載這些方法,以接受任意型別的資料。append方法始終將這些字元新增到緩衝區的末端;而insert方法則在指定的點新增字元。

  • StringBuilder 字串變數(非執行緒安全) ,這是在JDK5.0新增加的!該物件是一 個執行緒不安全的字串容器,在單執行緒操作的情況下此物件可以用於取代StringBuffer!!

  • (String和StringBuffer )兩者者之間的區別:
    這兩者之間的區別主要區別在效能上,String每次對存放進String當中的字串進行更改的時候都會生成一個新的
    String物件然後指標指向該物件(雖然Java不承認自己有指標這回事),而一旦當產生的沒有引用指向物件過多的時候,這個時候GC就會出動,對其進行清理,這個時候效能就會有所降低!而使用StringBuffer的時候,每次都會對該物件本身進行操作,而不是去建立一個新的物件,所以在多數情況下還是推薦使用該物件(即使用StringBuffer)。

StringBuilder 和 StringBuffer 適用的場景是什麼?

stringbuffer固然是執行緒安全的,因此stringbuffer是比stringbuilder更慢,在多執行緒的情況下,理論上是應該使用執行緒安全的stringbuffer的。

實際上基本沒有什麼地方顯示你需要一個執行緒安全的string拼接器 。

stringbuffer基本沒有適用場景,你應該在所有的情況下選擇使用stringbuiler,除非你真的遇到了一個需要執行緒安全的場景 。

stringbuffer的執行緒安全,僅僅是保證jvm不丟擲異常順利的往下執行而已,它可不保證邏輯正確和呼叫順序正確。大多數時候,我們需要的不僅僅是執行緒安全,而是鎖。

可能有人會問,既然這樣為什麼還會有StringBuffer??

因為最早是沒有stringbuilder的,sun的人不知處於何種考慮,決定讓stringbuffer是執行緒安全的,

於是,在jdk1.5的時候,終於決定提供一個非執行緒安全的stringbuffer實現,並命名為stringbuilder。

順便,javac好像大概也是從這個版本開始,把所有用加號連線的string運算都隱式的改寫成stringbuilder,

也就是說,從jdk1.5開始,用加號拼接字串已經幾乎沒有什麼效能損失了。