案例一
1.
String s = "a" + "b" + "c";
2.
String s = "";
s += "a";
s +="b";
s +="c";
-
3.
StringBuilder result = new StringBuilder();
result.append("a").append("b").append("c");
String s = result.toString();
運行效率:2>3>1
分析:
1.因爲直接+,所以內存中每次需要new StringBuilder()對象,每次需要append()兩次生成新的字符串,然後調用toString方法複製給s。所以下來總共,3次創建StringBuilder,6次append,3次toString
2.編譯器直接對”+”優化,直接賦值
3.總共1次創建StringBuilder,3次append,1次toString
案例2
1)
String s = "";
s = s + "a" + "b";
2)
String s = "";
s += "a" + "b";
運行效率 2) > 1)
1)運行時創建1個StringBuilder對象,3次append(s,a,b各一次),一次toString調用
2)運行時,編譯器發現右側”+“,直接優化成 ab,然後與左側相加,所以 1次StringBuilder對象,2次append,1次toString