java 在java中為什么String字符串可以作為對(duì)象來(lái)管理?
在java中為什么String字符串可以作為對(duì)象來(lái)管理?據(jù)我們所知,Java中創(chuàng)建字符串(對(duì)象)的方法很多:[2]直接定義字符串常量3]通過(guò)實(shí)例化字符串類(lèi)來(lái)創(chuàng)建字符串對(duì)象Java中的字符串可以直接作為
在java中為什么String字符串可以作為對(duì)象來(lái)管理?
據(jù)我們所知,Java中創(chuàng)建字符串(對(duì)象)的方法很多:[2]直接定義字符串常量
3]通過(guò)實(shí)例化字符串類(lèi)來(lái)創(chuàng)建字符串對(duì)象
Java中的字符串可以直接作為對(duì)象操作。原則是什么?
例如:
1,literal quantity of string,string constant pool
Java中字符串的literal quantity是一對(duì)用雙引號(hào)括起來(lái)的字符串,如“Chinese”。
字符串常量是常量池。當(dāng)string STR=“string”時(shí),編譯器將檢查在不朽生成中是否有對(duì)常量的引用。如果存在引用,編譯器將直接將地址分配給堆棧。如果沒(méi)有引用,編譯器將首先在不朽生成中打開(kāi)一個(gè)內(nèi)存空間,然后將地址分配給堆棧指針。
也就是說(shuō),字符串對(duì)象的引用仍然存儲(chǔ)在字符串常量池中。
2. 實(shí)例化string對(duì)象
該方法根據(jù)string對(duì)象重新創(chuàng)建一個(gè)string對(duì)象,在堆內(nèi)存中添加新的內(nèi)存塊后,將指針賦給堆棧指針。
對(duì)string常量的字符串長(zhǎng)度有沒(méi)有限制?
字符串以字符數(shù)組的形式存儲(chǔ)。如果數(shù)組的長(zhǎng)度為int類(lèi)型,則字符串的最大允許長(zhǎng)度為Integer.MAX價(jià)值觀。因?yàn)镴ava中的字符存儲(chǔ)在16位中,所以存儲(chǔ)最大長(zhǎng)度的字符串需要大約4GB的內(nèi)存。但是,這僅適用于字符串變量。如果是用代碼編寫(xiě)的字符串文字,如“ABC”和“1a2b”,則允許的最大長(zhǎng)度取決于該字符串在常量池中的存儲(chǔ)大小,即該字符串在類(lèi)格式文件Utf8中的存儲(chǔ)格式。理論上,字符串文字的最大長(zhǎng)度為2^16-1=65535。然而,實(shí)際測(cè)試表明,允許的最大長(zhǎng)度只有65534,這是一個(gè)編譯錯(cuò)誤