最近我们技术老大写了个性能方面的文章,明确写出在处理字符串时,如果有连接操作,用StringBuilder 来替换之前经常使用的"+". 号称用StringBuilder append方法要比"+" 高效,但我在实际工作时发现,java编译时已对"+"进行了优化,使用"+"连接字符串java在编译时已经被优化成StringBuilder的append.
例如:
<pre name="code" class="java"> @Override
public String toString() {
return "ListResponseData [title=" + title + ", total=" + total
+ ", hasMore=" + hasMore + ", items=" + items + ", components="
+ components + "]";
}
编译后的字节码:
// Method descriptor #36 ()Ljava/lang/String;
// Stack: 3, Locals: 1
public java.lang.String toString();
0 new java.lang.StringBuilder [69]
3 dup
4 ldc <String "ListResponseData [title="> [71]
6 invokespecial java.lang.StringBuilder(java.lang.String) [73]
9 aload_0 [this]
10 getfield com.yunos.gamestore.module.net.rest.response.ListResponseData.title : java.lang.String [37]
13 invokevirtual java.lang.StringBuilder.append(java.lang.String) : java.lang.StringBuilder [75]
16 ldc <String ", total="> [79]
18 invokevirtual java.lang.StringBuilder.append(java.lang.String) : java.lang.StringBuilder [75]
21 aload_0 [this]
22 getfield com.yunos.gamestore.module.net.rest.response.ListResponseData.total : int [43]
25 invokevirtual java.lang.StringBuilder.append(int) : java.lang.StringBuilder [81]
28 ldc <String ", hasMore="> [84]
30 invokevirtual java.lang.StringBuilder.append(java.lang.String) : java.lang.StringBuilder [75]
33 aload_0 [this]
34 getfield com.yunos.gamestore.module.net.rest.response.ListResponseData.hasMore : boolean [64]
37 invokevirtual java.lang.StringBuilder.append(boolean) : java.lang.StringBuilder [86]
40 ldc <String ", items="> [89]
42 invokevirtual java.lang.StringBuilder.append(java.lang.String) : java.lang.StringBuilder [75]
45 aload_0 [this]
46 getfield com.yunos.gamestore.module.net.rest.response.ListResponseData.items : java.util.List [50]
49 invokevirtual java.lang.StringBuilder.append(java.lang.Object) : java.lang.StringBuilder [91]
52 ldc <String ", components="> [94]
54 invokevirtual java.lang.StringBuilder.append(java.lang.String) : java.lang.StringBuilder [75]
57 aload_0 [this]
58 getfield com.yunos.gamestore.module.net.rest.response.ListResponseData.components : java.util.List [58]
61 invokevirtual java.lang.StringBuilder.append(java.lang.Object) : java.lang.StringBuilder [91]
64 ldc <String "]"> [96]
66 invokevirtual java.lang.StringBuilder.append(java.lang.String) : java.lang.StringBuilder [75]
69 invokevirtual java.lang.StringBuilder.toString() : java.lang.String [98]
72 areturn
Line numbers:
[pc: 0, line: 76]
[pc: 28, line: 77]
[pc: 57, line: 78]
[pc: 69, line: 76]
Local variable table:
[pc: 0, pc: 73] local: this index: 0 type: com.yunos.gamestore.module.net.rest.response.ListResponseData
}
从字节码中可以看出,"+"已经被优化成append了。