1. 程式人生 > >區別String、StringBuilder、Stringbuffer的總結

區別String、StringBuilder、Stringbuffer的總結

註意 線程不安全 -s string pan println tr1 rom out

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的總結