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