String, StringBuffer與StringBuilder的區別?


大部分情況下:StringBuilder > StringBuffer > String

String

String類是不可變類,即一旦一個String對象被創建以後,包含在這個對象中的字符序列是不可改變的,直至這個對象被銷燬。
如果對 String 類型進行改變,其實等同於生成了一個新的 String 對象,原對象如果沒有被再次引用 則會被GC

StringBuffer

StringBuffer對象則代表一個字符序列可變的字符串,它沒有重新生成一個對象,而是在原來的對象中連接新的字符串。
StringBuffer類中的方法都添加了synchronized關鍵字,也就是給這個方法添加了一個鎖,用來保證線程安全。

StringBuilder

StringBuilder沒有實現線程安全,所以性能略高。

Java9的改進

Java9改進了字符串(包括String、StringBuffer、StringBuilder)的實現。
在Java9以前字符串採用 char[] 數組來保存字符,因此字符串的每個字符佔 2 字節;
而Java9的字符串採用 byte[] 數組再加一個encoding-flag字段來保存字符,因此字符串的每個字符只佔 1 字節。所以Java9的字符串更加節省空間,字符串的功能方法也沒有受到影響。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章