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

jdk8字符串常量池在哪里 Java運(yùn)行時(shí)常量池是什么?

Java運(yùn)行時(shí)常量池是什么?在回答這個(gè)問(wèn)題之前,讓我們先談?wù)勈裁词浅A?。用final修改的成員變量稱(chēng)為常量。一旦指定了常量的值,就不能更改!final修改了三種類(lèi)型的變量:靜態(tài)變量、實(shí)例變量和局部變量

Java運(yùn)行時(shí)常量池是什么?

在回答這個(gè)問(wèn)題之前,讓我們先談?wù)勈裁词浅A俊?/p>

用final修改的成員變量稱(chēng)為常量。一旦指定了常量的值,就不能更改

!final修改了三種類(lèi)型的變量:靜態(tài)變量、實(shí)例變量和局部變量,它們代表三種類(lèi)型的常量。

Java中的常量池可以分為兩種方式:靜態(tài)常量池和運(yùn)行時(shí)常量池。

1)所謂的靜態(tài)常量池是*中的常量池。類(lèi)文件。類(lèi)文件中的常量池不僅包含字符串(number)的文字量,還包含類(lèi)和方法的信息,占用了類(lèi)文件的大部分空間。

2)運(yùn)行時(shí)常量池是JVM虛擬機(jī)將類(lèi)文件中的常量池加載到內(nèi)存中,并在完成類(lèi)加載操作后將其保存在方法區(qū)域中。我們經(jīng)常在方法區(qū)域中將常量池稱(chēng)為運(yùn)行時(shí)常量池。

只要我們?cè)贘ava中談?wù)摮氐母拍?,在大多?shù)情況下,它是為了減少頻繁的創(chuàng)建和破壞。使用一種方法來(lái)管理這個(gè)過(guò)程。讓我們簡(jiǎn)單地談?wù)勥@個(gè)問(wèn)題,以供具體參考。深入了解Java虛擬機(jī)書(shū)籍,了解更多。

小木的答案。根據(jù)自己的理解和別人的理解站在巨人的肩膀上,走得更遠(yuǎn)更快。

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

如果你看字符串的源代碼,你可以看到它是一個(gè)對(duì)象

!s=“123”

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

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

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

此時(shí),你操作S1,最好去常量池看看是否有這個(gè)對(duì)象。如果有,您可以直接獲取地址,因?yàn)槌A砍財(cái)?shù)據(jù)是共享的

如果此時(shí)S1=“1234”則常量池不存在,您將再次提取1、2、3、4,然后將其重新組合為新對(duì)象并放入常量池中

字符常量池是什么意思?

可以理解為專(zhuān)門(mén)為內(nèi)存中的字符串類(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)的?如果我們拆分代碼,我們可以看到stringa1=newstring(para)]的代碼實(shí)際上創(chuàng)建了兩個(gè)對(duì)象,一個(gè)是存儲(chǔ)在堆中的string對(duì)象,另一個(gè)是存儲(chǔ)在字符串池中的stringconstant對(duì)象