字串intern方法與大廠面試題解

2021-10-19 22:56:25 字數 2416 閱讀 1584

intern方法

intern方法的作用就是嘗試將乙個字串放入stringtable中,如果不存在就放入stringtable並返回stringtable中的位址(如果這個字串是通過2個new string()用『+』鏈結的方式建立的,呼叫intern方法則stringtable內放置的就是new string生成的物件的位址,而不是實實在在的字串值),如果存在的話就直接返回stringtable中的位址。這是jdk1.7、1.8版本中intern方法的作用,jdk1.6版本中有些不同,1.6中intern嘗試將字串物件放入stringtable,如果有則並不會放入,如果沒有會把此物件複製乙份,放入stringtable(此時字串常量池放入的就是實實在在的字串值), 再把stringtable中的物件返回。

題解對於字串常量池與字串拼接提前沒有了解的建議先看下這2片文章:

jvm虛擬機器執行時資料區のstringtable 字串常量池

字串拼接操作在底層是如何操作的?

//這裡的結果是false

string s1 = new string(

"a")

;//new生成1個物件,同時把a放進了字串常量池(常量池的a也是乙個物件,所以這一步總共建立了2個物件),s1是new的a物件

s1.intern();

//intern方法在常量池中找a,發現常量池中有,就返回a的位址,由於沒有變數接收,這一步相當於沒有動作。

string s2 =

"a";

//這種方式建立的字串直接生成在常量池,由於常量池中字串都是唯一的,所以s2是常量池中a

system.out.println(s1 == s2)

;//s1是new的a物件 != s2是常量池中a

//==

====

====

====

====

====

====

====

====

====

====

====

====

====

====

====

====

====

==//這裡的結果jdk1.6是false,1.7 1.8上是true

string s3 = new string(

"b") + new string(

"c")

;//通過字串拼接的這種方式,只相當於再堆空間中有乙個bc的物件,但是在字串常量池並沒有bc,s3是new的物件。

s3.intern();

//注意這裡,仔仔細細看上面關於intern方法的1.6 與1.7 1.8以上的區別

字串常量池中沒有bc,此時呼叫intern是複製了乙份bc到常量池,2個物件。

1.8 字串常量池中沒有bc,此時呼叫intern是複製了乙份bc的位址到常量池,1個物件,乙個物件的位址。

string s4 =

"bc"

;// 1.6:通過這種方式建立的字串直接放入字串常量池,發現常量池中有bc,所有此時s4是常量池的bc

1.8:發現常量池中有bc,但是這個bc指向的是堆空間中有s3,所以此時s4最終指向的就是s3

system.out.println(s3 == s4)

;s3是new的物件!=s4是常量池的bc 是false

1.8:s3是new的物件==s4最終指向的就是s3 是true

//==

====

====

====

====

====

====

====

====

====

====

====

====

====

====

====

====

====

==//這裡的結果是false

string s5 = new string(

"d") + new string(

"e")

;//通過字串拼接的這種方式,只相當於再堆空間中有乙個de的物件,但是在字串常量池並沒有de,s5是new的物件。

string s6 =

"de"

;//此時常量池沒有de,所以先把de放到字串常量池,s6指向的就是常量池中的de

s5.intern();

//intern方法在常量池中找de,發現常量池中有,就返回de的位址,由於沒有變數接收,這一步相當於沒有動作。

system.out.println(s5 == s6)

;//s5是new的物件 != s6指向的就是常量池中的de

字串 Intern 機制

字串在 python 中是最簡單也是最常用的資料型別之一,在 cpython 中字串的實現原理使用了一種叫做 intern 字串駐留 的技術來提高字串效率。究竟什麼是 intern 機制,這種機制又是通過什麼方式來提高字串效率的呢?希望這篇文章能夠拋磚引玉。先來看一段 s3 hello s4 hel...

Python中字串的intern機制

intern機制 字串型別作為python中最常用的資料型別之一,python直譯器為了提高字串使用的效率和使用效能,做了很多優化,例如 python直譯器中使用了 intern 字串駐留 的技術來提高字串效率,什麼是intern機制?即值同樣的字串物件僅僅會儲存乙份,放在乙個字串儲蓄池中,是共用的...

了解intern ,了解字串常量池

intern 是string乙個api,平時不常用,但是面試可能會考,掌握intern可避免被面試官問到時大眼瞪小眼的尷尬局面。當乙個string物件呼叫intern 方法時,會首先檢查字串常量池中是否存在equals相等的字串,若存在直接返回常量池中該字串物件,否則建立該字串物件並放入字串常量池。...