国产成人毛片视频|星空传媒久草视频|欧美激情草久视频|久久久久女女|久操超碰在线播放|亚洲强奸一区二区|五月天丁香社区在线|色婷婷成人丁香网|午夜欧美6666|纯肉无码91视频

字符串常量池在堆中還是方法區(qū) 字符串常量池到底存放的是字符串引用還是字符串對(duì)象?

字符串常量池到底存放的是字符串引用還是字符串對(duì)象?如果你看字符串的源代碼,你會(huì)發(fā)現(xiàn)它是一個(gè)對(duì)象!s=“123”寫(xiě)這句話(huà)時(shí),您將首先找出常量池中是否有字符串對(duì)象123。如果沒(méi)有字符串對(duì)象123,他將開(kāi)始

字符串常量池到底存放的是字符串引用還是字符串對(duì)象?

如果你看字符串的源代碼,你會(huì)發(fā)現(xiàn)它是一個(gè)對(duì)象

!s=“123”

寫(xiě)這句話(huà)時(shí),您將首先找出常量池中是否有字符串對(duì)象123。如果沒(méi)有字符串對(duì)象123,他將開(kāi)始提取,1,2,3

然后將其拼接成一個(gè)對(duì)象,即“123”

如果還有另一個(gè)對(duì)象也需要這個(gè)對(duì)象,例如S1=“123”

此時(shí),操作S1時(shí)應(yīng)先到常量池中查找是否有這個(gè)對(duì)象,如果有,取直接尋址,因?yàn)槌A砍財(cái)?shù)據(jù)是共享的,

如果此時(shí)S1=“1234”則常量池不存在,它將被再次提取,1、2、3、4,然后重新組裝成常量池中的新對(duì)象

!字符串源代碼有一個(gè)私有變量,字符類(lèi)型數(shù)組,用于提取這些單個(gè)字符,然后將其拼接到字符串對(duì)象中

字符常量池是什么意思?

它可以理解為內(nèi)存中專(zhuān)門(mén)為字符串類(lèi)型變量打開(kāi)的區(qū)域。例如,string a=“ABC”定義這樣一個(gè)變量時(shí),Java會(huì)先到常量池中查找是否有像“ABC”這樣的字符串,如果有,直接把內(nèi)存地址給a,否則會(huì)生成一個(gè)字符串“ABC”。當(dāng)下一個(gè)字符串B=“ABC”時(shí),發(fā)現(xiàn)常量池已經(jīng)有了“ABC”。這時(shí)JVM不會(huì)再生成“ABC”,而是直接引用“ABC”來(lái)引用B,所以這時(shí)你會(huì)發(fā)現(xiàn)a==B

string STR=“nihao”程序開(kāi)始執(zhí)行這個(gè)代碼,它肯定會(huì)創(chuàng)建一個(gè)對(duì)象,只是對(duì)象創(chuàng)建后,它是一個(gè)常量,不能更改,對(duì)象被放在字符串池中,也就是你所說(shuō)的常量池

如果我以后再寫(xiě)代碼:string other=“nihao”

STR和other的地址是一樣的,因?yàn)镾TR和other在字符串池中的聲明方式是一樣的,當(dāng)創(chuàng)建STR的對(duì)象時(shí),如果字符串池中沒(méi)有“nihao”常量,創(chuàng)建一個(gè)。在創(chuàng)建另一個(gè)對(duì)象時(shí),如果您發(fā)現(xiàn)字符串池中有“nihao”常量,請(qǐng)直接使用它

string B1=new string(“nihao”)

但是如果我們使用上述方法直接創(chuàng)建一個(gè)新字符串(),則A1和B1引用的對(duì)象不在字符串池中,而是在堆中。但是,new string()的參數(shù)“nihao”也是一個(gè)字符串。這根繩子是從哪里來(lái)的?如果我們拆分代碼,我們可以看到字符串A1=new string(para)]的代碼實(shí)際上創(chuàng)建了兩個(gè)對(duì)象,一個(gè)是字符串對(duì)象,存儲(chǔ)在堆中,另一個(gè)是字符串常量對(duì)象,存儲(chǔ)在字符串池中

Java常量池不在堆或堆棧中,這是獨(dú)立的內(nèi)存空間管理。

1. 堆棧:它存儲(chǔ)基本類(lèi)型變量數(shù)據(jù)和對(duì)象引用,但對(duì)象本身不存儲(chǔ)在堆棧中,而是存儲(chǔ)在堆(新對(duì)象)或常量池(字符串常量對(duì)象存儲(chǔ)在常量池中)。堆:存儲(chǔ)所有新對(duì)象。

3. 常量池:存儲(chǔ)字符串常量和基本類(lèi)型常量(publicstaticfinal)。

對(duì)于字符串:其對(duì)象的引用存儲(chǔ)在堆棧中。如果它們是在編譯時(shí)創(chuàng)建的(直接用雙引號(hào)定義),則它們存儲(chǔ)在常量池中。如果只能在運(yùn)行時(shí)(New)確定它們,則將它們存儲(chǔ)在堆中。對(duì)于相等的字符串,常量池中總是只有一個(gè)副本,堆中總是有多個(gè)副本。