一文帶你看懂Java中的Lock鎖底層AQS到底是如何實現的
阿新 • • 發佈:2022-05-27
String、StringBuilder和StringBuffer(摘抄自技術人成長之路)
可變性
String類中使用字元陣列儲存字串,private final char value[],所以string物件是不可變的。
StringBuilder與StringBuffer都繼承自AbstractStringBuilder類,在AbstractStringBuilder中也是使用字元陣列儲存字串,char[] value,這兩種物件都是可變的。
執行緒安全
String中的物件是不可變的,也就可以理解為常量,執行緒安全。
AbstractStringBuilder是StringBuilder與StringBuffer的公共父類,定義了一些字串的基本操作,如expandCapacity、append、insert、indexOf等公共方法。StringBuffer
效能
每次對String 型別物件進行改變的時候,都會生成一個新的String物件,然後將指標指向新的String 物件。
StringBuffer每次都會對StringBuffer物件本身進行操作,而不是生成新的物件並改變物件引用。相同情況下使用StirngBuilder 相比使用StringBuffer 僅能獲得10%~15% 左右的效能提升,但卻要冒多執行緒不安全的風險。
使用場景
在字串內容不經常發生變化的業務場景,優先使用String類,例如常量宣告、少量的字串拼接操作等。
在單執行緒環境下,頻繁地進行字串的操作,建議使用StringBuilder,例如SQL語句拼裝、JSON封裝等。
在多執行緒環境下,頻繁地進行字串的操作,建議使用StringBuffer,例如XML解析、HTTP引數解析與封裝