溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java之String、StringBuffer和StringBuilder的區別有哪些

發布時間:2020-09-09 10:49:12 來源:億速云 閱讀:387 作者:小新 欄目:編程語言

這篇文章主要介紹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的區別有哪些的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女