2 回答

TA貢獻1801條經驗 獲得超16個贊
public static void main(String[] args) {
String a = new String("abc");
String b = new String("abc");
System.out.println(a.equals(b));
System.out.println(a == b);
}
打印true,然后false。因此,具有相同字符序列的兩個字符串確實必須equal彼此關聯,但可以彼此關聯,也可以不==關聯。
顯然,a == a在所有情況下, anda是String包含與a.
但是在上面的示例中,我們創建了兩個不同的實例,它們恰好包含相同的字符序列。因此a != b。
那么在你的例子中發生了什么?字符串實習。
任何字符串文字都由編譯器分配在一個特殊的池中,并且任何重復的文字共享相同的引用。所以即使文字被定義了兩次,就編譯器而言,它們是同一個實例。

TA貢獻1886條經驗 獲得超2個贊
您的測試結果為 true 的原因是 JVM 喜歡做的一件非常奇怪的事情。因為您已經定義了兩個字面String
量,JVM 將決定存儲這些值之一,并且讓 a 和 b 引用同一個字符串。這就是為什么進行==
比較會導致true
.
正如其他人所說,這樣做String b = new String("abc");
將強制創建一個新的String
文字,這將是一個單獨的內存塊。因此==
比較將導致false
。
添加回答
舉報