編程基礎(chǔ)認(rèn)知,Java字符型常量詳解

編程基礎(chǔ)認(rèn)知,Java字符型常量詳解

長(zhǎng)沙達(dá)內(nèi)教育      2022-04-10 11:42:01     8

編程基礎(chǔ)認(rèn)知,Java字符型常量詳解,在Java程序中經(jīng)常會(huì)遇到類似于Hello這樣地字符串,那么這種類型的字符串是Java中是如何存儲(chǔ),下面就來討論一下字符串常量在內(nèi)存

課程價(jià)格 請(qǐng)咨詢

上課時(shí)段: 授課校區(qū):

詳細(xì)介紹

在Java程序中經(jīng)常會(huì)遇到類似于"Hello"這樣地字符串,那么這種類型的字符串是Java中是如何存儲(chǔ),下面就來討論一下字符串常量在內(nèi)存中的存儲(chǔ)方式

Java程序在編譯時(shí)會(huì)將程序中出現(xiàn)的常量(包括:char、byte、short、int、long、boolean和String類型)放到一個(gè)叫做常量池的地方。常量池也稱為對(duì)象池,顧名思義常量池中存儲(chǔ)的是對(duì)象。

那么在源程序中檢測(cè)到"Hello"這樣地常量字符串之后,編譯器都干了些什么:

首先,在常量池中創(chuàng)建一個(gè)String對(duì)象,該對(duì)象的內(nèi)存分布如下圖:

這里就需要提一下String定義的兩個(gè)變量:

private final char value[];//The value is used for character storageprivate int hash;//Cache the hash code for the string

其中第一個(gè)就是實(shí)際存儲(chǔ)字符串的數(shù)組,所有字符串最終的存儲(chǔ)形式都是字符數(shù)組。從上圖中可以很清晰的看出,實(shí)際的字符數(shù)組還是存儲(chǔ)在堆中,常量池中存儲(chǔ)的是String對(duì)象。

當(dāng)執(zhí)行String str="Hello",只是將常量池中"Hello"對(duì)象的地址賦給了str。

除了上面這個(gè)字符串常量的內(nèi)存模型需要理清之外,String類還有幾個(gè)很常用的構(gòu)造函數(shù),也需要對(duì)內(nèi)存模型非常熟悉:

public String(){this.value="".value;}

這是默認(rèn)的構(gòu)造函數(shù),它將一個(gè)空串的字符數(shù)組引用賦給了本類的數(shù)組數(shù)組引用,所以這個(gè)String對(duì)象中什么也沒有當(dāng)然這樣做并沒有什么好處,因?yàn)镾tring對(duì)象一但創(chuàng)建便不可更改其內(nèi)容(從value的修飾關(guān)鍵字final可以看出)。

public String(String original){this.value=original.value;this.hash=original.value;}

這里只是簡(jiǎn)單的復(fù)制了引用的值,并沒有復(fù)制引用的內(nèi)容,它們?nèi)匀恢赶蛲粋€(gè)對(duì)象。

public String(char value[]){this.value=Arrays.copyOf(value,value.length);}

Array.copyOf()會(huì)將value中的值重新拷貝一份出來,所以this.value和參數(shù)中的value完全是兩個(gè)對(duì)象,只不過它們的值相同而已

其余的構(gòu)造函數(shù)也基本類似,大家可自行分析

Java技術(shù)相關(guān)內(nèi)容

Java字符串類型:http://www.bjpowernode.com/tutorial_java_advance/629.html

以上就是長(zhǎng)沙達(dá)內(nèi)教育java培訓(xùn)機(jī)構(gòu)的小編針對(duì)“編程基礎(chǔ)認(rèn)知,Java字符型常量詳解”的內(nèi)容進(jìn)行的回答,希望對(duì)大家有所幫助,如有疑問,請(qǐng)?jiān)诰€咨詢,有專業(yè)老師隨時(shí)為你服務(wù)。

培訓(xùn)啦提醒您:交易時(shí)請(qǐng)核實(shí)對(duì)方資質(zhì),對(duì)于過大宣傳或承諾需謹(jǐn)慎!任何要求預(yù)付定金、匯款等方式均存在風(fēng)險(xiǎn),謹(jǐn)防上當(dāng)。