String intern 函数 在JDK6和JDK8中的区别

public class StringDemo {
    public static void main(String[] args) {
        String s = new String("1");
        s.intern();
        String s2 = "1";
        // JDK6 false
        // JDK8: false  new String("1")的时候 "1"已经加入常量池中。故s.intern()返回常量池中"1"的地址。但是s没有改变。还是指向堆空间
        System.out.println(s == s2);

        String s3 = new String("1") + new String("1");//执行完这行,常量池中没有“11”
        s3.intern();
        String s4 = "11";
        //JDK6: false
        //JDK8:true  s3.intern()前 常量池中没有"11",s3.intern()后 “11“加入常量池。返回常量池中地址。同时s3也指向常量池中地址
        System.out.println(s3 == s4);
    }
}
原文地址:https://www.cnblogs.com/kpwong/p/14755314.html