1. 程式人生 > 實用技巧 >String、StringBuilder、StringBuffer的區別

String、StringBuilder、StringBuffer的區別

區別:String為字串常量,一旦被建立的話,就不能再改變了。

StringBuilder和StringBuffer為字串變數,建立後是可以被更改的

速度:StringBuilder>StringBuffer>String

String str = "abc";
 
String str1 = str+"cd";

我們通過反編譯工具可以看到

String str = "abc";
String str1 = (new StringBuilder("str").append("cd"));

所以說Java中+對字串的拼接,其實現原理是使用StringBuilder.append

 String str="abc";
 System.out.println(str);
 str=str+"de";
 System.out.println(str);

看上面的程式碼,貌似只有一個物件,只是其中的值變化看而已,但是我們可以從Java的Jvm中看到,JVM又建立了一個新的物件也名為str,然後再把原來的str的值和“de”加起來再賦值給新的str,而原來的str就會被JVM的垃圾回收機制(GC)給回收掉了,所以,str實際上並沒有被更改,也就是前面說的String物件一旦建立之後就不可更改了。所以,Java中對String物件進行的操作實際上是一個不斷建立新的物件並且將舊的物件回收的一個過程,所以執行速度很慢。

而StringBuilder和StringBuffer的物件是變數,對變數進行操作就是直接對該物件進行更改,而不進行建立和回收的操作,所以速度要比String快很多。

什麼情況下使用StringBuilder,什麼情況下使用StringBuffer

區別:StringBuilder是執行緒不安全,StringBuffer是執行緒安全的

如果一個StringBuffer物件在字串緩衝區被多個執行緒使用時,StringBuffer中很多方法可以帶有synchronized關鍵字,所以可以保證執行緒是安全的,但StringBuilder的方法則沒有該關鍵字,所以不能保證執行緒安全,有可能會出現一些錯誤的操作。所以如果要進行的操作是多執行緒的,那麼就要使用StringBuffer,但是在單執行緒的情況下,還是建議使用速度比較快的StringBuilder。

總結下:

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

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

StringBuffer:適用多執行緒下在字元緩衝區進行大量操作的情況

參考連結:https://mp.weixin.qq.com/s/S8FkuZPJ4sgWjz3kiyqeew(為什麼阿里巴巴不建議在for迴圈中使用"+"進行字串拼接)

原作者:https://blog.csdn.net/yy_cly/article/details/87649885