可能重複:
String object creation using new and its comparison with intern method爲什麼相同的java字符串採用相同的地址?
我用繩子玩耍更瞭解他們,我注意到的東西,我無法解釋:
String str1 = "whatever";
String str2 = str1;
String str3 = "whatever";
System.out.println(str1==str2); //prints true...that's normal, they point to the same object
System.out.println(str1==str3); //gives true..how's that possible ?
如何最後一行是真的嗎?這意味着str1和str3在內存中具有相同的地址。
這是一個編譯器優化,它足夠聰明地檢測到兩個字符串文字是相同的(「無論」),因此將str1和str3分配給同一個對象?或者我在字符串的底層機制中錯過了一些東西?
javac編譯器可以檢測到這種簡單的情況,只爲該字符串分配一次空間並重用它。在運行期間,這是另一回事。 – nhahtdh
http://stackoverflow.com/a/513839/1273830>「因爲這些文字是由編譯器實現的,因此引用同一個對象!」 – Prasanth