doSomething(""+s);
得到由JVM
兩次翻譯成下面的代碼
doSomething(new StringBuilder().append("").append(s.toString()).toString());
所以現在,而不是有你有2個1個字符串生成器,並呼籲StringBuilder.toString()。
更好更快的方法是隻使用StringBuilder,而不手動連接字符串。
我只是檢查了Java 1.6.0_26中產生的字節碼編譯器和智能電話的toString()只有一次,但它仍然創造的StringBuilder的兩個實例。這裏的字節代碼
0 new java.lang.StringBuilder [16]
3 dup
4 invokespecial java.lang.StringBuilder() [18]
7 astore_1 [s]
8 new java.lang.StringBuilder [16]
11 dup
12 invokespecial java.lang.StringBuilder() [18]
15 aload_1 [s]
16 invokevirtual java.lang.StringBuilder.append(java.lang.Object) : java.lang.StringBuilder [19]
19 invokevirtual java.lang.StringBuilder.toString() : java.lang.String [23]
22 invokestatic my.test.Main.doSomething(java.lang.String) : void [27]
25 return
爲什麼你認爲StringBuilder.toString()是緩慢和資源消耗? – DHall
我錯了,謝謝 – Reacen