這兩個代碼有不同的輸出,我不知道爲什麼。這兩種初始化方式之間有什麼區別字符串
String a="abc";
String b="abc";
System.out.println(a==b + " " + a.equals(b));
輸出爲「真真」
String a="abc";
String b=new String("abc");
System.out.println(a==b + " " + a.equals(b));
輸出是「假的真」
這兩個代碼有不同的輸出,我不知道爲什麼。這兩種初始化方式之間有什麼區別字符串
String a="abc";
String b="abc";
System.out.println(a==b + " " + a.equals(b));
輸出爲「真真」
String a="abc";
String b=new String("abc");
System.out.println(a==b + " " + a.equals(b));
輸出是「假的真」
當你使用這個
String a="abc";
String b="abc";
java的內存是abc
只創建一個對象,並在這裏a和b都指向同一個對象,並==
不檢查字符串的內容,而不是它檢查的參考值。但只要你做到這一點
String b=new String("abc");
Java的內存是從a
不同,現在B和A都指向兩個不同的對象,因此,如果你有equals
功能結果比較的內容將是真正創建一個新對象b
但如果您現在比較參考,結果將是錯誤的
這必須是大量的問題的重複,但我會發表評論說當你執行以下操作時:
String a = "abc";
String b = "abc";
JVM創建一個單個常量池中包含字符串abc
的字符串對象。因此,a
和b
字符串只是指向池中的相同字符串。
但是,當你做到以下幾點:
String a = "abc";
String b = new String("abc");
即使abc
已經存在於池中創建新對象。因此比較a == b
返回false,儘管這兩個字符串的內容仍然是等價的。
評論,downvotes?說些什麼_。 –
補充說明:在Java中,'=='比較內存位置,'equals()'比較字符串的內容。 – GingerDeadshot
爲什麼你發佈的答案几乎是以前發佈的這個問題的答案的重複? –
我正在寫這個答案,並且他在我即將完成的時候發佈了一個地方,並且存在差異,我提到了什麼==做什麼以及什麼等於。我尊重您的觀點,但我認爲它值得發佈。 –
好的,他們指着同一個對象,但是當我做了這個b =「qwe」;? (我想在這一刻我用qwe創建一個新對象) –