@Test
public void test3(){
 String s = new String("1");
    s.intern();
    String s2 = "1";
    System.out.println(s == s2);
}
@Test
    public void test1(){
      String str2 = new String("str")+new String("01");
         str2.intern();
         String str1 = "str01";
         System.out.println(str2==str1);
    }
请问同在jdk1.7,为什么两个的结果不一样啊

解决方案 »

  1.   

    这个原因主要是从JDK 1.7后,HotSpot 将常量池从永久代移到了元空间,正因为如此,JDK 1.7 后的intern方法在实现上发生了比较大的改变,JDK 1.7后,intern方法还是会先去查询常量池中是否有已经存在,如果存在,则返回常量池中的引用,这一点与之前没有区别,区别在于,如果在常量池找不到对应的字符串,则不会再将字符串拷贝到常量池,而只是在常量池中生成一个对原字符串的引用。
      

  2.   

    copy!!!这个问题这位大佬已经完美解答了。https://blog.csdn.net/weixin_35663229/article/details/52796157?locationNum=6&fps=1