淺談Java中StringBuilder和StringBuffer的應用於差別

提及Java中StringBuilder和StringBuffer的應用於差別,StringBuilder是Java中的一個類,從定義上說他是一個可變字符序列,在功能上與StringBuffer較爲接近,也是一個兼容性較好的API,常常在字符緩衝區和單線程中使用。StringBuilder的概念首先在C#中出現,後來被引入Java中;但在Java中自己具的功能類似的類是StringBuffer,功能在於對字符串進行存儲和操做,他是一個能夠更改的字符串變量。
下面對二者的區別進行比較:程序員

在 StringBuilder 上的主要操做是 append 和 insert 兩種方法,方法可重載,可接受的數據類型也沒有限制。每重方法都能有效地將給定的數據轉換成字符串,以後將該字符串的字符添加或插入到字符串生成器中。append 方法始終將這些字符添加到生成器的末端; insert 方法則在指定的點添加字符。例如,若是 z 引用一個當前內容爲「start」的字符串生成器對象,則該方法調用 z.append(「le」) 將使字符串生成器包含「startle」,而 z.insert(4, 「le」) 將更改字符串生成器,使之包含「starlet」。 尚學堂•百戰程序員提示,每一個字符串生成器都有必定的容量。當字符串生成器所包含的字符序列的長度未能超出容量,就不用分配新的內部緩衝區。若是內部緩衝區溢出,則此容量自動增大。將 StringBuilder 的實例用於多個線程是不安全的。若是須要這樣的同步,而且能夠用於在無需建立一個新的字符串對象狀況下修改字符串,則建議使用 StringBuffer。
String對象是不可改變的。每次使用 System.String類中的方法之一時,都要在內存中建立一個新的字符串對象,這就須要爲該新對象分配新的空間。前面講過,String做爲不可修改的對象,當對String修改會產生一個新的字符串對象,與之相對應的StringBuffer類的對象可以進行屢次修改而且不會產生新的未使用的對象,所以在內存上要優於String對象。
關於StringBuffer對象的初始化,要注意不可將null直接賦予其中:
StringBuffer a=new StringBuffer()
這是初始化其爲空值的正確寫法,若是想要初始化具備初始值,則可經過:
StringBuffer a=new StringBuffer(‘abc’);
此時其初始值爲abc
StringBuffer和String之間的相互轉化,但對於StringBuffer而言不可直接強制類型轉化。安全

關於二者的比較能夠體如今執行速度方面,即StringBuilder執行速度要比 StringBuffer快。二者都是字符串變量,是可改變的對象,當咱們用它們操做字符串,其實是在一個對象上操做的,不須要和String同樣建立一些對象進行操做,因而提高了速度。除此以外,StringBuilder是線程非安全的,而StringBuffer是線程安全的。字符串緩衝區被多個線程使用是,JVM不能保證StringBuilder的操做是安全的,雖然他的速度最快,可是能夠保證StringBuffer是能夠正確操做的。因此相比而言StringBuilder更適合單線程操做。app

以上就是對Java中StringBuilder和StringBuffer的應用於差別的簡要對比,但願能對你學Java有所幫助。
 ui

相關文章
相關標籤/搜索