我們做了下面的String對象?字符串參考?
String str1 = new String("ABC");
String str2 = new String("ABC");
String str3 = "ABC";
String str4 = "ABC";
兩個問題上面:
system.out.println("valof str1 "+str1);
- 它打印str1
爲ABC 但是,當我們比較if(str1==str2)
,其字符串對象的refrences進行比較。 jvm如何獲得差異?str1
具有不同的充參考從str2
和str3
但str3
和str4
具有相同的引用,這樣做的JVM檢查,如果我們要以平等的運營商(而不是新的)已經存在創建的字符串(如果它存在,它不會創建新對象只是將相同的引用賦值給新變量,即str4
),但是在新操作符的情況下它不會執行此確認?
如果你可以調用s.intern()來實習任何字符串。 – 2011-06-16 18:59:16
@Spike:的確,我更新了我的答案以證明這一點。 (無論如何,我本來打算把它放在首位,但是因爲我想在第一篇文章---「西部最快的槍」中發帖---我通常會發布一些基本的東西,然後在5分鐘內將其展開期間。) – 2011-06-16 18:59:57
感謝克里斯提供有見地的解釋。但是我對你的解釋有如下疑問:1)如果我們創建了str1 = new String(「ABC」)// //它現在不會被添加到池中。但是當我們做str1.intern()時,它會在池中添加str1我的point1仍然沒有答案,即當我們做如果(str1 == str2)它比較參考,但在打印str1內的sys出它實際上打印值? – 2011-06-17 13:14:57