卖逼视频免费看片|狼人就干网中文字慕|成人av影院导航|人妻少妇精品无码专区二区妖婧|亚洲丝袜视频玖玖|一区二区免费中文|日本高清无码一区|国产91无码小说|国产黄片子视频91sese日韩|免费高清无码成人网站入口

jdk8字符串常量池在哪里 字符串常量池到底存放的是字符串引用還是字符串對象?

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

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

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

!s=“123”

寫這句話時,您將首先找出常量池中是否有字符串對象123。如果沒有字符串對象123,他將開始提取,1,2,3

然后將其拼接成一個對象,即“123”

如果還有另一個對象也需要這個對象,例如S1=“123”

此時,操作S1時應先到常量池中查找是否有這個對象,如果有,取直接尋址,因為常量池數(shù)據(jù)是共享的,

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

!字符串源代碼有一個私有變量,一個字符類型數(shù)組,用來提取這些單個字符,然后拼接成一個字符串對象

java 1.8常量池會被gc嗎?

由final或static聲明的常量將不會被GC函數(shù)回收,并且正在運行的程序將始終存在于堆棧中。其余的類變量在運行時創(chuàng)建,并在必要時循環(huán)使用

string STR=“nihao”當程序開始執(zhí)行此代碼時,它必須創(chuàng)建一個對象,但對象創(chuàng)建后,它是一個常量,不能更改,并且此對象被放在字符串池中,這就是你說的常量池

如果我以后再寫代碼:String other=“nihao”

STR和other的地址是一樣的,因為STR和other的聲明方式是一樣的。創(chuàng)建STR對象時,字符串池中沒有“nihao”常量,所以在創(chuàng)建另一個對象時,創(chuàng)建一個,發(fā)現(xiàn)字符串池中已經(jīng)存在常量“nihao”,所以可以直接使用

string B1=new string(“nihao”)

但是如果用上述方法直接新建string(),A1和B1引用的對象不在字符串池中,而是在堆中,但是new string()的參數(shù)“nihao”也是一個字符串,這個字符串從哪里來?如果我們拆分代碼,我們會理解它:

string A1=new string(para)

我們會發(fā)現(xiàn)句子string A1=new string(“nihao”)實際上創(chuàng)建了兩個對象,一個是存儲在堆中的string對象,一個是string constant對象,它存儲在字符串池中

Java常量池不在堆或堆棧中,這是獨立的內存空間管理。

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

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

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