日本java和中國(guó)java Java運(yùn)行時(shí)常量池是什么?
Java運(yùn)行時(shí)常量池是什么?在回答這個(gè)問(wèn)題之前,讓我們先談?wù)勈裁词浅A?。用final修改的成員變量稱為常量。一旦指定了常量的值,就不能更改!final修改了三種類型的變量:靜態(tài)變量、實(shí)例變量和局部變量
Java運(yùn)行時(shí)常量池是什么?
在回答這個(gè)問(wèn)題之前,讓我們先談?wù)勈裁词浅A俊?/p>
用final修改的成員變量稱為常量。一旦指定了常量的值,就不能更改
!final修改了三種類型的變量:靜態(tài)變量、實(shí)例變量和局部變量,它們代表三種類型的常量。
事實(shí)上,Java池中有兩種類型的常量:靜態(tài)常量和運(yùn)行時(shí)常量。
1)所謂的靜態(tài)常量池是*中的常量池。類文件。類文件中的常量池不僅包含字符串(number)的文字量,還包含類和方法的信息,占用了類文件的大部分空間。
2)運(yùn)行時(shí)常量池是JVM虛擬機(jī)將類文件中的常量池加載到內(nèi)存中,并在完成類加載操作后將其保存在方法區(qū)域中。我們經(jīng)常在方法區(qū)域中將常量池稱為運(yùn)行時(shí)常量池。
只要我們?cè)贘ava中談?wù)摮氐母拍?,在大多?shù)情況下,它是為了減少頻繁的創(chuàng)建和破壞。使用一種方法來(lái)管理這個(gè)過(guò)程。讓我們簡(jiǎn)單地談?wù)勥@個(gè)問(wèn)題,以供具體參考。深入了解Java虛擬機(jī)書籍,了解更多。
小木的答案。站在巨人的肩膀上,按照他自己的理解和別人的理解,你可以走得更遠(yuǎn)更快。
字符串常量池是在方法區(qū)中還是在獨(dú)立的區(qū)域中?
string STR=“nihao”當(dāng)程序開(kāi)始執(zhí)行這個(gè)代碼時(shí),它必須創(chuàng)建一個(gè)對(duì)象,但是對(duì)象創(chuàng)建之后,它是一個(gè)不可更改的常量,對(duì)象放在字符串池中,也就是你調(diào)用的常量池
如果我以后再寫代碼:string other=“Nihao”
STR和other的地址是一樣的,因?yàn)镾TR和other的聲明方式是一樣的。創(chuàng)建STR對(duì)象時(shí),如果字符串池中沒(méi)有“nihao”常量,請(qǐng)創(chuàng)建一個(gè)。在創(chuàng)建其他對(duì)象時(shí),如果發(fā)現(xiàn)字符串池中有“nihao”常量,就直接使用它
string B1=New string(“nihao”)
但是如果用上述方法直接New string(),則A1和B1引用的對(duì)象不在字符串池中,而是在堆中。但是,new string()的參數(shù)“nihao”也是一個(gè)字符串。這根繩子是從哪里來(lái)的?如果我們拆分代碼,我們會(huì)理解它:
string A1=new string(para)
會(huì)發(fā)現(xiàn)代碼字符串A1=new string(“nihao”)實(shí)際上創(chuàng)建了兩個(gè)對(duì)象,一個(gè)是string object,存儲(chǔ)在堆中,另一個(gè)是string constant object,存儲(chǔ)在字符串池中