首頁  >  文章  >  Java  >  Java之String、StringBuffer和StringBuilder的差別與原理

Java之String、StringBuffer和StringBuilder的差別與原理

(*-*)浩
(*-*)浩轉載
2019-10-21 16:40:353541瀏覽

首先我們先來談談String:

Java之String、StringBuffer和StringBuilder的差別與原理

String物件一旦創建,其值是不能修改的,如果要修改,會重新開啟記憶體空間來儲存修改之後的對象,也就是修改了String的參考。 

因為 String 的底層是用陣列來儲存值的,陣列長度無法改變這個特性導致了上述問題。

‌如果我們在實際開發過程中需要對某個字串進行頻繁的修改,使用 String 就會造成記憶體空間的浪費,應該怎麼解決這個問題呢? ‌

答案就是可以使用 StringBuffer 來解決這個問題。

下面我們就來詳細談談StringBuffer:

‌StringBuffer 和String 類似,底層也是用一個陣列來儲存字串的值,並且陣列的預設長度為16,即一個空的StringBuffer 對

象,數組長度為16。實例化一個 StringBuffer 物件即建立了一個大小為 16 個字元的字串緩衝區。

但是當我們呼叫有一個參構函數來建立一個StringBuffer 物件時,數組長度就不再是16 了,而是根據目前物件的值來決定數組的長

度,數組的長度為「目前物件的值的長度16」。

所以一個 StringBuffer 建立完成之後,有 16 個字元的空間可以對其值進行修改。如果修改的值範圍超出了 16 個字符,會先檢查

StringBuffer 物件的原 char 數組的容量能不能裝下新的字串,如果裝不下則會對 char 數組進行擴容。

那StringBuffer是怎麼進行擴容的呢?

擴容的邏輯就是建立一個新的 char 數組,將現有容量擴大一倍再加上2,如果還是不夠大則直接等於需要的容量大小。擴容

完成之後,將原數組的內容複製到新數組,最後將指標指向新的 char 數組。

接下來看StringBuffer的兄弟-StringBuilder

StringBuilder 和StringBuffer 擁有同一個父類別AbstractStringBuilder,同時實作的介面也是完全一樣,都實作了

java.io.Serializable, CharSequence 兩個介面。

那它兩個有什麼差別呢?

最大的差異在於StringBuffer 對幾乎所有的方法都實現了同步,執行緒比較安全,在多執行緒系統中可以保證資料同步;

而StringBuilder 沒有實現同步,線程不安全,在多線程系統中不能使用StringBuilder。

StringBuffer 和StringBuilder 的使用場景:

當需要考慮線程安全的場景下使用StringBuffer,如果不需要考慮線程安全,追求效率的場景下可以使用StringBuilder。

以上是Java之String、StringBuffer和StringBuilder的差別與原理的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:csdn.net。如有侵權,請聯絡admin@php.cn刪除
上一篇:Java IO知識點下一篇:Java IO知識點