intern()方法的使用

intern()

intern方法的作用是:如果字符串常量池中已经包含一个字符串等于此String对象的字符串,则返回常量池中的这个String对应的对象,

否则将其添加到常量池并返回常量池中的引用。

在jdk1.7以后,就不会像之前那样把String对象复制到常量池,而仅仅复制堆中String对象的引用至常量池。

public class RuntimeConstantPool {
    public static void main(String[] args) {
        //放在了堆中
        String tr1=new StringBuilder("常量").append("池").toString();
        //将"常量池"这个字符串的引用放入常量池
        String tr2=tr1.intern();
        System.out.println(tr2==tr1);
        
        String st=new StringBuffer("jav").append("a").toString();
        //"java"这个字符串已经存在在常量池里
        String st2=st.intern();
        System.out.println(st2==st);
    }
}

故这段代码在1.7+版本运行为true,false,在1.6-则为 false,false。

常量池的位置

JAK1.6在方法区
JAK1.7放在堆里面
JAK1.8以后放在一个独立空间里面,叫做“元空间”

猜你喜欢

转载自www.cnblogs.com/lshao/p/9689586.html
今日推荐