String、StringBuilder和StringBuffer

Genius_Spark發表於2018-09-28

執行速度

StringBuilder > StringBuffer > String

String執行速度慢的原因

  1. 資料型別的不同

    1)String為字串常量

    字串常量儲存於常量池中,不可以被更改

String str = "i am";
str = str + "Tom";
這種並不是直接在原有的str上增加了"Tom",而是JVM回收了之前的str,產生新的str,並將"i am Tom"賦值給了它
複製程式碼

2)StringBuilder和StringBuffer為字串變數

字串變數存放在棧中,從棧中讀取資料的速度僅次於暫存器

與上面同樣的操作
StringBuffer str = new StringBuffer();
StringBuffer str1 = mew StringBuffer("i am");
StringBuffer str2 = new StringBuffer("Tom");
str = str1 + str2;//此執行速度不是最快
str = str.append(str1).append(str2);//使用Java中自帶的函式,執行速度會加快,可以使語句在執行時,減少建立物件的數量,從而減少執行時間
複製程式碼

執行緒安全

線上程安全上,StringBuilder是執行緒不安全的,而StringBuffer是執行緒安全的

  如果一個StringBuffer物件在字串緩衝區被多個執行緒使用時,StringBuffer中很多方法可以帶有synchronized關鍵字,所以可以保證執行緒是安全的,但StringBuilder的方法則沒有該關鍵字,所以不能保證執行緒安全,有可能會出現一些錯誤的操作。

所以如果要進行的操作是==多執行緒==的,那麼就要使用==StringBuffer==,但是在==單執行緒==的情況下,還是建議使用速度比較快的==StringBuilder==。

小結

String:適用於少量的字串操作的情況
StringBuilder:適用於單執行緒下在字元緩衝區進行大量操作的情況
StringBuffer:適用多執行緒下在字元緩衝區進行大量操作的情況

相關文章