java中String,StringBuffer,StringBuilder的區別

                            java中String,StringBuffer,StringBuilder的區別

我們簡單瞭解下這三種數據結構。

String:字符串常量(線程安全)

StringBuffer:字符串變量(線程安全)

StringBuilder:字符串變量(線程不安全)

這裏string是字符串常量,我們單個討論。我們來看看兩種聲明字符串的方式。

這兩種數據雖然相同,但是調用==判斷的時候卻不相同。因爲String a="123"的時候,直接在編譯的時候就確定好了字符

串的值。123存儲在方法區的常量池中。而String b=new String("123")是在運行的時候在堆區開闢了空間,存儲了字符串

123。如果我們添加語句b="100"。這時候是在堆區重新new了個空間,重新賦值。我們來看看String類的源碼。

string是由char[]組成的。當改變字符串的時候是在堆區重新申請地址然後賦值。

每次改變string的值的時候都是在新的地址上寫入。所以是線程安全的。

stringBuffer是字符串變量,先來看下實現源碼:

當改變Stringbuffert的值的時候是調用父類的append函數,對字符串進行改變。而且用了synchronized修飾,當多個線

程對StringBuffer的值進行操作的時候,是線程安全的。

StringBuilder也是字符串變量,實現源碼:

當改變StringBuilder的值的時候是調用父類的append函數,但是沒有用synchronized關鍵字修飾,所以線程不安全。

在對字符串改變的性能來說,StringBuilder的性能比StringBuffer稍高一些。但是性能差別不大。尤其是字符串長度較

長的時候,性能差別更小。

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