您的代碼編譯成
public static void main(java.lang.String[]);
Code:
0: ldc #16 // String This is
2: astore_1
3: new #18 // class java/lang/StringBuilder
6: dup
7: aload_1
8: invokestatic #20 // Method java/lang/String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
11: invokespecial #26 // Method java/lang/StringBuilder."<init>":(Ljava/lang/String;)V
14: ldc #29 // String my book
16: invokevirtual #31 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
19: invokevirtual #35 // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
22: astore_1
23: ldc #39 // String This is my book
25: astore_2
26: getstatic #41 // Field java/lang/System.out:Ljava/io/PrintStream;
29: aload_1
30: aload_2
31: if_acmpne 38
34: iconst_1
35: goto 39
38: iconst_0
39: invokevirtual #47 // Method java/io/PrintStream.println:(Z)V
42: return
這相當於
public static void main(String[] args) {
StringBuilder sb = new StringBuilder("This is ");
sb.append("my book");
String s1 = sb.toString();
String s2 = "This is my book";
System.out.println(s1 == s2);
}
因爲
s1=s1+"my book";
不是一個常量表達式 - 你正在閱讀一個變量的值,編譯器會假設你可以在此期間改變它。如果你想
由常量表達式計算的字符串(§15.28)在編譯時計算出來,然後視爲它們是文字。 JLS (§3.10.5)
適用你就必須更改您的代碼
public static void main(String[] args) {
String s1 = "This is " + "my book";
String s2 = "This is my book";
System.out.println(s1 == s2);
}
或
public static void main(String[] args) {
final String s1a = "This is ";
final String s1b = "my book";
String s1 = s1a + s1b;
String s2 = "This is my book";
System.out.println(s1 == s2);
}
,現在你保證,它的作品。第二個例子編譯成
public static void main(java.lang.String[]);
Code:
0: ldc #16 // String This is
2: astore_1
3: ldc #18 // String my book
5: astore_2
6: ldc #20 // String This is my book
8: astore_3
9: ldc #20 // String This is my book
11: astore 4
13: getstatic #22 // Field java/lang/System.out:Ljava/io/PrintStream;
16: aload_3
17: aload 4
19: if_acmpne 26
22: iconst_1
23: goto 27
26: iconst_0
27: invokevirtual #28 // Method java/io/PrintStream.println:(Z)V
30: return
,正如你所看到的負載2倍字符串#20
'「這是」 +「我的書」'是首先'「這ismy書」'缺乏空間的因此不管你如何比較它都不相等。 – zapl
「這是」+「我的書」也是假的。 –
提供鏈接後,你應該寫一個真正的問題來清除所有這些已經造成的混淆。 – csmckelvey