PartA: 源码
public static void main(String[] args) {
String a = "";
for (int i = 0; i < 5; i++) {
a = "prefix" + a + "postfix";
}
}
PartB: 反编译后 javap -c
public static void main(java.lang.String[]);
Code:
0: ldc #2 // String
2: astore_1
3: iconst_0
4: istore_2
5: iload_2
6: bipush 10
8: if_icmpge 42
11: new #3 // class java/lang/StringBuilder
14: dup
15: invokespecial #4 // Method java/lang/StringBuilder."<init>":()V
18: ldc #5 // String prefix
20: invokevirtual #6 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
23: aload_1
24: invokevirtual #6 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
27: ldc #7 // String postfix
29: invokevirtual #6 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
32: invokevirtual #8 // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
35: astore_1
36: iinc 2, 1
39: goto 5
42: return
结论:
每行+拼接都调用了java/lang/StringBuilder."", 也就是创建了一个StringBuilder对象, 并且不断的循环, 不断的创建