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