區別String、StringBuilder、Stringbuffer的總結
1.三者在執行速度上: StringBuilder > StringBuffer > String
2. String:不可變長字符串
StringBuilder : 為可變長字符串
StringBuffer:為可變長字符串
示例一:String s = "this is a";
System.out.println(s.hashCode());
s = s + " apple.";
System.out.println(s.hashCode());
System.out.println(s);
乍一看,String類型的字符串,不是也可改變長度嗎?實際上,這兩個字符串s在內存中不是同一個對象,(hashCode碼不一樣),第二個s對象是jvm生成的對第一個s對象的拷貝.
3.String s = "this is "+"a simple "+"test";
StringBuilder sb = new StringBuilder("This is ").append("a simple ").append(test);
在這種情況下,貌似生成String字符串的速度比生成StringBuilder的速度要快,但實際上String s = "this is "+"a simple "+"test";本身就是String s = "this is a simple test".
所以不需要太多的時間了。但大家這裏要註意的是,如果你的字符串是來自另外的String對象的話,速度就沒那麽快了,譬如:
String str2 = “This is only a”;
String str3 = “ simple”;
String str4 = “ test”;
String str1 = str2 +str3 + str4;
4. 線程安全方面:StringBuilder 線程不安全
StringBuffer 線程安全的
在單線程操作大量數據時使用StringBuilder,多線程操作大量數據時使用StringBuffer。
區別String、StringBuilder、Stringbuffer的總結