String a="a";
String b="b";
String c= "a"+"b";
Code:
0: ldc #2 // String a
2: astore_1
3: ldc #3 // String b
5: astore_2
6: ldc #4 // String ab
8: astore_3
9: return
02 字符串和变量的连接,生成新的对象,没有生成字符串常量
String a="a";
String b="b";
String c= "a"+b;
Code:
0: ldc #2 // String a
2: astore_1
3: ldc #3 // String b
5: astore_2
6: new #4 // class java/lang/StringBuilder
9: dup
10: invokespecial #5 // Method java/lang/StringBuilder."":()V
13: ldc #2 // String a
15: invokevirtual #6 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
18: aload_2
19: invokevirtual #6 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
22: invokevirtual #7 // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
25: astore_3
26: return
"+"连接字符串的时候,默认调用StringBuilder的append方法,最后的toString方法返回的是新对象
@Override
public String toString() {
// Create a copy, don't share the array
return new String(value, 0, count);
}
其中的注释就告诉了我们字符数组不是共享的,创建的一个复制的对象。
唯一不符合的地方就是两个字符串连接生成字符串常量如01。



