在Java中,String是不可變類型,因此對於字符串的操做提供了兩個輔助類:StringBuffer和StringBuilder。java
這個兩個類的主要區別在於:安全
不過,須要注意的是,在利用+
對String對象直接進行拼接的時候,Java內部其實仍是用StringBuilder來實現的,可是和顯式地調用StringBuilder略有區別。app
考慮以下代碼:ui
javaString[] strings = new String[]{"one", "two", "three", "four", "five"}; String resultStr = ""; StringBuilder resultBuilder = new StringBuilder(); for (int i = 0; i < strings.length; i++) { resultStr += strings[i]; } for (int i = 0; i < strings.length; i++) { resultBuilder.append(strings[i]); }
在利用+
直接進行拼接時,每次循環都會生成一個新的StringBuilder對象,也就是說等同:線程
javaStringBuilder stringBuilder = new StringBuilder(resultStr); stringBuilder.append(strings[i]); resultStr = stringBuilder.toString();
這樣運行的效率明顯是低於顯式調用StringBuilder的。code
可是在有一種狀況下,利用+
拼接的速度會遠遠快於用StringBuilder或者StringBuffer,考慮以下代碼:對象
javaString str = "one" + "two" + "three"; StringBuilder strBuilder = new StringBuilder().append("one").append("two").append("three");
在這種狀況下,JVM會直接把String str = "one" + "two" + "three";
理解爲String str = "onetwothree」;
,也就說不須要像一般狀況下生成StringBuilder對象而後再拼接,速度天然快不少。不過須要強調的一點是,固然字符串來自其餘對象的時候,JVM不會作這種特殊處理,也就說以下代碼:three
javaString one = "one"; String two = "two"; String three = "three"; String str = one + two + three;
效率仍然是很是低的。字符串