对于java的Sting.intern()的一些注意

Posted yixinli

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对于java的Sting.intern()的一些注意相关的知识,希望对你有一定的参考价值。

今天翻看书时遇到了这样一个问题,对于String.intern()方法又有了一些认识和看法。首先我们看它的api技术分享图片

大意就是intern()方法会在常量池中记录首次出现的实例引用,但是在jdk1.6中却不是这样。jdk1.6中会将首次遇到的字符串实例

复制一份放在持久代里,返回的则是永久代中对于这个字符串的引用。

如下图

技术分享图片

技术分享图片

首先,这个运行环境是jdk1.7,运行后会分别的到true和false.这里由于StringBuilder 会在java堆上创建实例,intern()方法实现不会再复制实例,

只是在常量池中记录首次出现的实例引用,所以为true.而s2返回false是因为“java”这个字符串在执行StringBuilder()方法前已经出现过,

也就是说默认的在字符串常量池中已经有它的引用,不再符合“首次出现的原则”,所以返回false.而“计算机软件”这个字符串是首次出现的,所以

返回true.细节点就是“java”字符串的引用早就有了。这里参考了《深入理解java虚拟机》这本书。希望大家可以多多交流多提意见,感谢大家的观看。

以上是关于对于java的Sting.intern()的一些注意的主要内容,如果未能解决你的问题,请参考以下文章

通过实例程序验证与优化谈谈网上很多对于Java DCL的一些误解以及为何要理解Java内存模型

JAVA 9 新特性

死磕 java线程系列之线程池深入解析——生命周期

手把手:Java内存泄漏分析Memory Analyzer Tool

完成一个java项目需要的一些基础

Netty感悟