String,StringBuffer與StringBuilder的區別

更加詳細的內容可以查看https://blog.csdn.net/u011702479/article/details/82262823

String

字符串廣泛應用 在Java 編程中,在 Java 中字符串屬於,Java 提供了 String 類來創建操作字符串

需要注意的是,String的值是不可變的,這就導致每次對String的操作都會生成新的String對象,這樣不僅效率低下,而且大量浪費有限的內存空間。

StringBuffer 和 StringBuilder

爲了應對經常性的字符串相關的操作,谷歌引入了兩個新的類——StringBuffer類和StringBuild類來對此種變化字符串進行處理。StringBuilder 類在 Java 5 中被提出,它和 StringBuffer 之間的最大不同在於 StringBuilder 的方法不是線程安全的(不能同步訪問)。

 

StringBuffer 源代碼淺析

StringBuffer 繼承了AbstractStringBuilder這個類,當我們在main中創建一個StringBuffer 對象時,StringBuffer 的構造方法會調用它的父類:

 

StringBuffer 的構造方法

而它的父類則創建了一個,char類型的數組,構造方法中傳入了要創建的數組的長度。

但是查看源代碼就可以發現,StringBuffer一共有四個構造方法,每個構造方法以不同的方式配置了即將創建的char類型數組的長度,如下所示:

從上圖可以發現,各個構造方法以不同的方式設置了數組的長度:

  • 第一個構造函數設置了StringBuffer的默認長度也就是16
  • 第二個構造方法要求傳入char類型數組的長度
  • 第三個構造方法以字符串的長度再加上16爲數組的長度
  • 第四個則是調用了CharSequence這個類,這個類的作用網上說是一組字符序列,暫時可以理解爲和String一樣可以定義字符串的一個對象,通過這個類獲取到定義的字符串的長度加16爲即將創建的數組的長度,然後調用append進行追加。

常用方法解析

StringBuffer的append方法

在此之前首先必須瞭解一下toStringCache,個人理解,這個toStringCache字段是爲了作緩存的 緩存最後一次toString的內容. 當被修改的時候這個cache清空. 也就是說, 如果沒被修改, 那麼這個toStringCache就是上一次toString的結果.

沒被修改的時候, 就可以直接把toStringCache作爲new String的參數. 然後把這個String返回就行了. 

也就是cache有效的時候, 就不必進行arraycopy的複製操作. cache失效了才進行arraycopy的複製操作.

StringBuffer的append方法是用來追加字符串的,java對該方法進行了不斷的重寫,共十一個方法

方法一,傳入Object對象

從上圖可以看出append方法首先清除,

 

 

 

 

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