jdk 1.7关于字符串常量池的问题
@Test
publicvoidtest3(){
Strings=newString("1");
s.intern();
Strings2="1";
System.out.println(s==s2);
}
@Test
publicvoidtest1(){
 Stringstr2=newString("str")+newString("01");
str2.intern();
Stringstr1="str01";
System.out.println(str2==str1);
}
有个疑惑,为什么第一个会是false 常量池里面不是也是s的引用吗?

解决方案 »

  1.   

    你换成 s.intern() == s2试试就知道了
      

  2.   

    String是包装类,在运算时会自解包取得值,所以第一句String s=new String("1");这句你可以看作类初始化,这时候没自解包所以赋予的类地址。而String str2=new String("str")+new String("01");因为中间有运算符所以会自解取值后相加。