摘要:在之前,常量池屬于永久區(qū)的一部分,但在之后,被移動(dòng)到堆中進(jìn)行管理。方法獲得在常量池中的符號(hào)引用,如果常量池中沒(méi)有該常量字符串,該方法會(huì)將字符串加入常量池。雖然在以上的情況下,都是相同的。
在JDK6之前,常量池屬于永久區(qū)的一部分,但在JDK7之后,被移動(dòng)到堆中進(jìn)行管理。
String.intern()方法獲得在常量池中的符號(hào)引用,如果常量池中沒(méi)有該常量字符串,該方法會(huì)將字符串加入常量池。
雖然String.intern方法的返回值永遠(yuǎn)等于字符串常量,但是不代表在系統(tǒng)的每時(shí)每刻,相同的字符串的intern返回都是一樣的。(雖然在95%以上的情況下,都是相同的)。因?yàn)榇嬖谝环N可能:在一次intern之后,該字符串在某一時(shí)刻被回收之后,再進(jìn)行一次intern調(diào)用,那么字面量相同的字符串重新被加入常量池,但是引用位置已經(jīng)不同。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/64849.html
摘要:我看到一個(gè)上的問(wèn)題是關(guān)于的感覺(jué)比較有意思于是自己也去探索了一下有了一些自己的見(jiàn)解于是在此記錄下來(lái)我們首先來(lái)看一個(gè)例子編程編程這個(gè)例子會(huì)輸出什么呢有些讀者朋友可能沒(méi)有想到其實(shí)上面的例子在不同的版本中運(yùn)行會(huì)有不同的結(jié)果的那么接下來(lái)我們來(lái)試一下吧 我看到一個(gè) segmentfault 上的問(wèn)題, 是關(guān)于 String.intern() 的, 感覺(jué)比較有意思, 于是自己也去探索了一下, 有了一...
摘要:為了減少在中創(chuàng)建的字符串的數(shù)量,字符串類(lèi)維護(hù)了一個(gè)字符串常量池。但是當(dāng)執(zhí)行了方法后,將指向字符串常量池中的那個(gè)字符串常量。由于和都是字符串常量池中的字面量的引用,所以。究其原因,是因?yàn)槌A砍匾4娴氖且汛_定的字面量值。 String,是Java中除了基本數(shù)據(jù)類(lèi)型以外,最為重要的一個(gè)類(lèi)型了。很多人會(huì)認(rèn)為他比較簡(jiǎn)單。但是和String有關(guān)的面試題有很多,下面我隨便找兩道面試題,看看你能不能...
摘要:概念是一個(gè)方法,它的作用是如果字符串常量池中已經(jīng)包含了一個(gè)等于此對(duì)象的字符串,則返回代表池中這個(gè)字符串的對(duì)象否則,將此對(duì)象包含的字符串添加到常量池中,并且返回此對(duì)象的引用。中,字符串常量池是放在于永久代中的,這個(gè)是完全區(qū)分于堆內(nèi)存的。 概念: String.intern()是一個(gè)native方法,它的作用是:如果字符串常量池中已經(jīng)包含了一個(gè)等于此String對(duì)象的字符串,則返回代表池中...
摘要:對(duì)比較返回是因?yàn)檫@個(gè)字符串在執(zhí)之前已經(jīng)出現(xiàn)過(guò),字符串常量池中已經(jīng)有它的引用了,不符合首次出現(xiàn)的原則,而計(jì)算機(jī)軟件這個(gè)字符串則是首次出現(xiàn)的,因此返回。 在《深入理解Java虛擬機(jī)》書(shū)中,提到在jdk1.7的版本中用String.intern()返回引用。 public class RuntimeConstantPoolOOM { public static void main(S...
摘要:證明返回常量池中已存在的對(duì)象,不等于新建的對(duì)象。為什么要設(shè)計(jì)成一下內(nèi)容來(lái)自發(fā)現(xiàn)百度的中文版本基本也是此文的翻譯版。總之,安全性和字符串常量池緩存是被設(shè)計(jì)成不可變的主要原因。 String是Java中最常用的類(lèi),是不可變的(Immutable), 那么String是如何實(shí)現(xiàn)Immutable呢,String為什么要設(shè)計(jì)成不可變呢? 前言 關(guān)于String,收集一波基礎(chǔ),來(lái)源標(biāo)明最后,不確...
摘要:種基本類(lèi)型的常量池都是系統(tǒng)協(xié)調(diào)的,類(lèi)型的常量池比較特殊。在中,字符串常量池已經(jīng)從區(qū)移到正常的區(qū)域。此時(shí)引用對(duì)象內(nèi)容是,但此時(shí)常量池中是沒(méi)有對(duì)象的。這樣,首先執(zhí)行聲明的時(shí)候常量池中是不存在對(duì)象的,執(zhí)行完畢后,對(duì)象是聲明產(chǎn)生的新對(duì)象。 概覽 1. 類(lèi)聲明 String 被聲明為 final,因此它不可被繼承。 在 Java 8 及之前,內(nèi)部使用 char 數(shù)組存儲(chǔ)數(shù)據(jù)。 public fi...
閱讀 1178·2021-09-10 10:51
閱讀 909·2019-08-30 15:53
閱讀 2735·2019-08-30 12:50
閱讀 986·2019-08-30 11:07
閱讀 1998·2019-08-30 10:50
閱讀 3607·2019-08-29 18:47
閱讀 1319·2019-08-29 18:44
閱讀 1607·2019-08-29 17:01