摘要:在之前,常量池属于永久区的一部分,但在之后,被移动到堆中进行管理。方法获得在常量池中的符号引用,如果常量池中没有该常量字符串,该方法会将字符串加入常量池。虽然在以上的情况下,都是相同的。
在JDK6之前,常量池属于永久区的一部分,但在JDK7之后,被移动到堆中进行管理。
String.intern()方法获得在常量池中的符号引用,如果常量池中没有该常量字符串,该方法会将字符串加入常量池。
虽然String.intern方法的返回值永远等于字符串常量,但是不代表在系统的每时每刻,相同的字符串的intern返回都是一样的。(虽然在95%以上的情况下,都是相同的)。因为存在一种可能:在一次intern之后,该字符串在某一时刻被回收之后,再进行一次intern调用,那么字面量相同的字符串重新被加入常量池,但是引用位置已经不同。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/64849.html
摘要:我看到一个上的问题是关于的感觉比较有意思于是自己也去探索了一下有了一些自己的见解于是在此记录下来我们首先来看一个例子编程编程这个例子会输出什么呢有些读者朋友可能没有想到其实上面的例子在不同的版本中运行会有不同的结果的那么接下来我们来试一下吧 我看到一个 segmentfault 上的问题, 是关于 String.intern() 的, 感觉比较有意思, 于是自己也去探索了一下, 有了一...
摘要:为了减少在中创建的字符串的数量,字符串类维护了一个字符串常量池。但是当执行了方法后,将指向字符串常量池中的那个字符串常量。由于和都是字符串常量池中的字面量的引用,所以。究其原因,是因为常量池要保存的是已确定的字面量值。 String,是Java中除了基本数据类型以外,最为重要的一个类型了。很多人会认为他比较简单。但是和String有关的面试题有很多,下面我随便找两道面试题,看看你能不能...
摘要:概念是一个方法,它的作用是如果字符串常量池中已经包含了一个等于此对象的字符串,则返回代表池中这个字符串的对象否则,将此对象包含的字符串添加到常量池中,并且返回此对象的引用。中,字符串常量池是放在于永久代中的,这个是完全区分于堆内存的。 概念: String.intern()是一个native方法,它的作用是:如果字符串常量池中已经包含了一个等于此String对象的字符串,则返回代表池中...
摘要:对比较返回是因为这个字符串在执之前已经出现过,字符串常量池中已经有它的引用了,不符合首次出现的原则,而计算机软件这个字符串则是首次出现的,因此返回。 在《深入理解Java虚拟机》书中,提到在jdk1.7的版本中用String.intern()返回引用。 public class RuntimeConstantPoolOOM { public static void main(S...
摘要:证明返回常量池中已存在的对象,不等于新建的对象。为什么要设计成一下内容来自发现百度的中文版本基本也是此文的翻译版。总之,安全性和字符串常量池缓存是被设计成不可变的主要原因。 String是Java中最常用的类,是不可变的(Immutable), 那么String是如何实现Immutable呢,String为什么要设计成不可变呢? 前言 关于String,收集一波基础,来源标明最后,不确...
摘要:种基本类型的常量池都是系统协调的,类型的常量池比较特殊。在中,字符串常量池已经从区移到正常的区域。此时引用对象内容是,但此时常量池中是没有对象的。这样,首先执行声明的时候常量池中是不存在对象的,执行完毕后,对象是声明产生的新对象。 概览 1. 类声明 String 被声明为 final,因此它不可被继承。 在 Java 8 及之前,内部使用 char 数组存储数据。 public fi...
阅读 1135·2021-09-10 10:51
阅读 860·2019-08-30 15:53
阅读 2694·2019-08-30 12:50
阅读 948·2019-08-30 11:07
阅读 1966·2019-08-30 10:50
阅读 3550·2019-08-29 18:47
阅读 1278·2019-08-29 18:44
阅读 1568·2019-08-29 17:01