public class StringTest {
?
?/**
? * @param args
? */
?public static void main(String[] args) {
??String str1 = "abc";
??String str2 ="de";
??String str3 = str1 + str2;
??String str4 ="abc" + "de";
??String str5="abcde";
??System.out.println(str3==str5);
??System.out.println(str4==str5);
?}
}
以前搞不懂到低是true或false,呵呵,現在借助javap,一看就明了。
public static void main(java.lang.String[]);
? Code:
?? 0:?ldc?#2; //String abc
?? 2:?astore_1
?? 3:?ldc?#3; //String de
?? 5:?astore_2
?? 6:?new?#4; //class java/lang/StringBuilder
?? 9:?dup
?? 10:?invokespecial?#5; //Method java/lang/StringBuilder."<init>":()V
?? 13:?aload_1
?? 14:?invokevirtual?#6; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
?? 17:?aload_2
?? 18:?invokevirtual?#6; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
?? 21:?invokevirtual?#7; //Method java/lang/StringBuilder.toString:()Ljava/lang/String;
?? 24:?astore_3
?? 25:?ldc?#8; //String abcde
?? 27:?astore?4
?? 29:?ldc?#8; //String abcde
?? 31:?astore?5
?? 33:?getstatic?#9; //Field java/lang/System.out:Ljava/io/PrintStream;
?? 36:?aload_3
?? 37:?aload?5
?? 39:?if_acmpne?46
?? 42:?iconst_1
?? 43:?goto?47
?? 46:?iconst_0
?? 47:?invokevirtual?#10; //Method java/io/PrintStream.println:(Z)V
?? 50:?getstatic?#9; //Field java/lang/System.out:Ljava/io/PrintStream;
?? 53:?aload?4
?? 55:?aload?5
?? 57:?if_acmpne?64
?? 60:?iconst_1
?? 61:?goto?65
?? 64:?iconst_0
?? 65:?invokevirtual?#10; //Method java/io/PrintStream.println:(Z)V
?? 68:?return
}