intern()方法的使用

Posted lshao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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以后放在一个独立空间里面,叫做“元空间”



以上是关于intern()方法的使用的主要内容,如果未能解决你的问题,请参考以下文章

浅析String.intern()方法

String intern()方法详解

JDK方法区元空间以及String.intern()知识要点

对String.intern()的理解

jdk1.6与jdk1.8中String的intern()方法区别

Java必修课String.intern()原来还能这么用(原理与应用)