我想了解在Java中的參考比較。 假設我們主要有以下代碼:比較字符串引用
public static void main (String args[]) {
String str1 = "Love!";
String str2 = "Love!";
String str3 = new String("Love!");
String str4 = new String("Love!");
String str5 = "Lov"+ "e!";
String str6 = "Lo" + "ve!";
String s = "e!";
String str7 = "Lov"+ s;
String str8 = "Lo" + "ve!";
String str9 = str1;
}
我明白str1 == str2 == str5 == str6 == str8 == str9
和所有的人都是一樣的對於公共遊泳池。 (值「愛!」)。 s
也是對公共池的引用,但它指的是值「e!」
我也明白str1 != s
。
我知道str3
,str4
是對HEAP的引用,它們中的每一個都是不同的對象。 str3 != str4
。
我不明白爲什麼,,我很想得到一個解釋。
如果你「理解」了'str1 == str4',那麼你需要忘記你認爲你知道的東西,因爲它不是。 'str3','str4'和'str7'都是3個獨立的對象。 – Andreas
是的,我的不好。它在堆中。 str3,str4在堆中。對不起 – Romansko
簡單的答案:編譯器會在連接兩個字符串時專門處理它,編譯器知道這些字符串是什麼(因爲它們是字符串文字或「static final」常量)。 's'是一個變量,這就是爲什麼'str7'不屬於這種情況。 – ajb