Java教程

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

 

这篇关于Java7之后的intern的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!