【JVM】JDK7后intern方法总结

如果你不相信努力和时光,那么成果就会是第一个选择辜负你的。不要去否定你自己的过去,也不要用你的过去牵扯你现在的努力和对未来的展望。不是因为拥有希望你才去努力,而是去努力了,你才有可能看到希望的光芒。【JVM】JDK7后intern方法总结,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

JDK6及之前字符串常量池是放在永久代的,这里不讨论,JDK7之后将字符串常量池迁移到了JVM的堆中,注意删除永久代更换为元空间是JDK8哈。

测试代码1如下:

    @Test
    public void test01() {

        String str2 = new StringBuilder("12").append("34").toString();
        String intern = str2.intern();
        String str1 = "1234";
        System.out.println(str2 == intern);
        System.out.println(str1 == intern);
        
    }

输出结果:

true

true

测试代码2如下:

    @Test
    public void test02() {
        String str1 = "1234";
        String str2 = new StringBuilder("12").append("34").toString();
        String intern = str2.intern();
        System.out.println(str2 == intern);
        System.out.println(str1 == intern);
    }

输出结果:

flase

true

结论:

String调用intern()方法时,会先去字符串常量池中查找,如果有,返回字符串常量池中的常量对象引用地址;如果没有,将当前字符串放入字符串常量池后,返回常量池中的常量对象引用地址,即当前String对象引用地址。

用法:

用于大量重复字符串的创建,速度会略慢于直接创建,因为会执行一次intern方法,但是会节省大量内存,因为创建时只需要保存一份常量池的引用即可,同时因为常量池被放到堆中,相当于间接降低了gc频率,所以最终并不一定会降低程序性能

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/206151.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!