1. 程式人生 > >String、StringBuffer與StringBuilder的區別

String、StringBuffer與StringBuilder的區別

string 單線程 public pan color 緩沖 ron 很多 bsp

String 字符串常量
StringBuffer 字符串變量(線程安全)
StringBuilder 字符串變量(非線程安全)

首先三者主要輸在運行速度和線程安全這兩位方面。
string:是一個java類,是一個字符串常量,聲明是:public final ,所以final的話是改變不了的。字符串值改變不了,就只能在內存創建一個空間來保存新的字符串。所以一旦遇到復雜的操作,用string是多麽低效率的事啊。
StringBuilderStringBuffer有公共類AbstractStringBuilder(抽象類)。
1、執行速度上比較(快慢):

stringbuilder>stringbuffer>string
原因(也就是變量和常量的關系):string為字符串常量,後兩個是字符串變量,也就是說string對象一旦創建之後該對象是不可更改的,但後兩者的對象是變量,是可以更改的。而不進行創建和回收,所以速度要比string快很多。
2、線程安全上比較:stringbuilder是線程不安全的,而stringbuffer是線程安全的。
原因:String:對象定義後,線程安全。
stringbuffer對象在字符串緩沖區被多個線程使用時,stringbuffer中有很多可以帶有synchronize關鍵字,所以可以保證線程是安全的。

stringbuilder的方法則沒有該關鍵字,所以不能保證線程安全,有可能會出現一些錯誤。
建議:如果要進行操作的是多線程,那就使用stringbuffer,但在單線程的情況下,還是建議使用速度較快的stringbuilder。

總結: String:適用於少量的字符串操作的情況

StringBuilder:適用於單線程下在字符緩沖區進行大量操作的情況

StringBuffer:適用多線程下在字符緩沖區進行大量操作的情況

String、StringBuffer與StringBuilder的區別