来看一段代码
public class Test {
String str1 = "51";
String str2 = "manong";
String str3 = str1 + str2;
}
反编译后,通过javap查看
D:\app>javap -c Test
Compiled from "Test.java"
public class Test extends java.lang.Object{
java.lang.String str1;
java.lang.String str2;
java.lang.String str3;
public Test();
Code:
0: aload_0
1: invokespecial #1; //Method java/lang/Object."":()V
4: aload_0
5: ldc #2; //String 51
7: putfield #3; //Field str1:Ljava/lang/String;
10: aload_0
11: ldc #4; //String manong
13: putfield #5; //Field str2:Ljava/lang/String;
16: aload_0
17: new #6; //class java/lang/StringBuilder
20: dup
21: invokespecial #7; //Method java/lang/StringBuilder."":()V
24: aload_0
25: getfield #3; //Field str1:Ljava/lang/String;
28: invokevirtual #8; //Method java/lang/StringBuilder.append:(Ljava/lang/
String;)Ljava/lang/StringBuilder;
31: aload_0
32: getfield #5; //Field str2:Ljava/lang/String;
35: invokevirtual #8; //Method java/lang/StringBuilder.append:(Ljava/lang/
String;)Ljava/lang/StringBuilder;
38: invokevirtual #9; //Method java/lang/StringBuilder.toString:()Ljava/la
ng/String;
41: putfield #10; //Field str3:Ljava/lang/String;
44: return
}
我们可以发现,原来字符串常量在拼接过程中,是将String转成了StringBuilder后,使用其append方法进行处理的。Java中的+对字符串的拼接,其实现原理是使用StringBuilder.append