我们做了下面的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