1. 程式人生 > 其它 >函式和遞迴

函式和遞迴

String、StringBuilder和StringBuffer(摘抄自技術人成長之路)

可變性

String類中使用字元陣列儲存字串,private final char value[],所以string物件是不可變的。

StringBuilder與StringBuffer都繼承自AbstractStringBuilder類,在AbstractStringBuilder中也是使用字元陣列儲存字串,char[] value,這兩種物件都是可變的。

執行緒安全

String中的物件是不可變的,也就可以理解為常量,執行緒安全。

AbstractStringBuilder是StringBuilder與StringBuffer的公共父類,定義了一些字串的基本操作,如expandCapacity、append、insert、indexOf等公共方法。StringBuffer

方法加了同步鎖,所以是執行緒安全的。StringBuilder並沒有對方法進行加同步鎖,所以是非執行緒安全的。

效能

每次對String 型別物件進行改變的時候,都會生成一個新的String物件,然後將指標指向新的String 物件。

StringBuffer每次都會對StringBuffer物件本身進行操作,而不是生成新的物件並改變物件引用。相同情況下使用StirngBuilder 相比使用StringBuffer 僅能獲得10%~15% 左右的效能提升,但卻要冒多執行緒不安全的風險。

使用場景

在字串內容不經常發生變化的業務場景,優先使用String類,例如常量宣告、少量的字串拼接操作等。

單執行緒環境下,頻繁地進行字串的操作,建議使用StringBuilder,例如SQL語句拼裝、JSON封裝等。

多執行緒環境下,頻繁地進行字串的操作,建議使用StringBuffer,例如XML解析HTTP引數解析與封裝