编程语言
首页 > 编程语言> > Java7之后的intern

Java7之后的intern

作者:互联网

最近在《深入理解Java虚拟机》一书中了解到,以下内容在Java7中第一个返回true,第二个返回false,产生了一些疑惑,经过一番搜索,对intern的理解有所加深,这里记一下。

public class RuntimeConstantPoolOOM {

    public static void main(String[] args) {
        String str1 = new StringBuilder("计算机").append("软件").toString();
        System.out.println(str1.intern() == str1);

        String str2 = new StringBuilder("ja").append("va").toString();
        System.out.println(str2.intern() == str2);
    }
}

很久前就知道intern会在常量池中创建常量,但是第一个为什么是true?

回过头来再去了解intern,原来在java7之后,intern方法在第一次将字符串加入常量池的时候,是以当前对象作为常量放进的常量池的。

因此,str1的intern被调用的时候,str1本身已经被放进了常量池,因此第一个是true

 

第二个是因为java这个字符串在java7中其它地方出现过,不满足第一次出现的条件。

参考:

https://www.zhihu.com/question/51102308

https://blog.csdn.net/weixin_44201525/article/details/120897052

 

看到一个图不错:

 

转自:https://www.csdn.net/tags/OtTaYgxsMDg0NDktYmxvZwO0O0OO0O0O.html

 

标签:常量,str2,str1,intern,之后,Java7,https,true
来源: https://www.cnblogs.com/flying607/p/16176880.html