public class Demo {
public static void main(String[] args) {
String s1 = "Hello";
String s2 = "Hello";
System.out.println("s1 == s2 " + (s1 == s2));
String s5 = "Hel" + "lo";
String s6 = "He" + "llo";
System.out.println("s5 == s6 " + (s5 == s6));
String s7 = "He";
String s8 = "Hello";
s7 = s7.concat("llo");
System.out.println("s7 == s8 " + (s7 == s8));
String s10 = "He";
s10 = s10 + "llo";
System.out.println("s1 == s10 "+(s1 == s10));
}
}
在前面的代碼中,s7 == s8和s1 == s10給出false。有人可以解釋我,在這裏實際發生了什麼s7 = s7.concat(「llo」);和s10 = s10 +「llo」;我明白==運算符檢查引用和equal()檢查對象的內容。但我需要知道爲什麼s7和s10引用變量的位模式與s8和s1不同。如果這些東西與編譯時生成的字符串和運行時生成的字符串有關,那麼我怎樣才能確定它是編譯時還是運行時字符串?關於java中==運算符的問題
你是什麼意思的「參考變量位模式」? – Cameron 2010-09-26 19:37:29
String問題上的另一個'=='。似乎在這個相同的問題上的變化被頻繁地詢問。難道不應該有標準答案,並且所有後續事件都會被重複關閉嗎? – 2010-09-26 22:05:53
@cameron我從一些書中學到了如果一個引用變量c引用了對象X017432並且引用變量d也引用了對象X017432,那麼c和d中的位就是相同的。所以我需要知道爲什麼s7和s10引用不等於已經引用字符串池中的「Hello」的s8和s10。 – ddfnfal 2010-09-27 06:46:52