摘要:在之前,常量池屬于永久區的一部分,但在之后,被移動到堆中進行管理。方法獲得在常量池中的符號引用,如果常量池中沒有該常量字符串,該方法會將字符串加入常量池。雖然在以上的情況下,都是相同的。
在JDK6之前,常量池屬于永久區的一部分,但在JDK7之后,被移動到堆中進行管理。
String.intern()方法獲得在常量池中的符號引用,如果常量池中沒有該常量字符串,該方法會將字符串加入常量池。
雖然String.intern方法的返回值永遠等于字符串常量,但是不代表在系統的每時每刻,相同的字符串的intern返回都是一樣的。(雖然在95%以上的情況下,都是相同的)。因為存在一種可能:在一次intern之后,該字符串在某一時刻被回收之后,再進行一次intern調用,那么字面量相同的字符串重新被加入常量池,但是引用位置已經不同。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/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...
閱讀 1164·2021-09-10 10:51
閱讀 896·2019-08-30 15:53
閱讀 2724·2019-08-30 12:50
閱讀 976·2019-08-30 11:07
閱讀 1990·2019-08-30 10:50
閱讀 3598·2019-08-29 18:47
閱讀 1308·2019-08-29 18:44
閱讀 1599·2019-08-29 17:01