日期:2014-05-20  浏览次数:20695 次

关于字符串操作中intern()方法的调用问题
如下代码:
public class Test {
public static void main(String[] args) {
String s1 = "abc";
String s2 = "abc";
String s3 = "abcabc";
String s4 = "abc" + "abc";
String s5 = s1 + s2;
String s6 = ( s1 + s2 ).intern();
System.out.println( s3 == s4 );
System.out.println( s3 == s5 );
System.out.println( s3 == s6 );
}
}

输出的第一行是true,第二行是false,第三行是true。。。按理说在创建新String对象的时候Java会先在String池中查找是否存在相同的String内容啊。。。那为什么s4查了,s5却是查都没查直接建立了新的内容和s3一样的String对象,只有像s6一样显式调用inter()方法才查呢?

------解决方案--------------------
String s4 = "abc" + "abc";编译器处理过后就是s4="abcabc";所以和s3相等。s5第二个不是字面量相加,所以会创建一个新的对象。第三行两个字符串内容相同,调用itern后会相等