1. 運行速度:StringBulider>StringBuffer>String
String為什么運行行慢呢?
String:字符串常量
StringBuffer、StringBulider:字符串變量
創建String對象后,不能再改變;而StringBuffer和StrignBulider創建對象后,還可以改變(每次改變String的值,都要新創建一個對象,再將引用 指向該對象,浪費內存空間,內存中的無用引用多了以后,jvm的GC就開始工作,系統就會慢了)。
2.線程安全:StringBuffer是線程安全的,因為StringBuffer的很多方法中都可以使用Sychronized關鍵字,可保證線程安全,而StringBulider的方法中沒有該關鍵字,不能保證線程安全。
3.適用場景:String:適用於少量字符串操作情況。
StringBulider:適用於單線程在字符串緩存區進行大量操作。
StringBuffer:適用於多線程在字符串緩存區進行大量操作。
4.舉個例子:
String:每次改變String的值,都要新創建一個對象,再將引用指向該對象,浪費內存空間,內存中的無用引用多了以后,jvm的GC就開始工作,系統就會慢了。
StringBuffer:StringBuffer每次都是對對象本身進行操作,而有種特殊情況String要比StringBuffer快:
String s="This"+"is a pen";
StringBuffer sb=new StringBuffer("This").append("is a pen");
創建上面這兩個的速度其實都差不多,但是下面這種就能體現出StrignBuffer的優勢了
String s1="This";
String s2="is a pen";
String s3=s1+s2;
那么重點來了:具體使用場景,我找到了一個很有用的:https://www.zhihu.com/question/20101840