String str = new String(“abc”) 到底創(chuàng)建了幾個(gè)對(duì)象?
首先String str是定義了一個(gè)字符串變量,并未產(chǎn)生對(duì)象,=不產(chǎn)生對(duì)象,那么只有后面的new String("abc")了。把它拆分成"abc"和new String(),首先在字符串常量池去尋找有沒(méi)有"abc"這個(gè)字符串,沒(méi)有就創(chuàng)建一個(gè)“abc”字符串對(duì)象在棧中,然后new String把這個(gè)字符串對(duì)象拷貝一份到堆中,返回這個(gè)對(duì)象的引用。所以一共產(chǎn)生兩個(gè)對(duì)象
試問(wèn)str變量存儲(chǔ)在堆中還是棧中?關(guān)鍵點(diǎn)是區(qū)分str是成員變量還是局部變量,如果是局部變量在方法體內(nèi),它就存儲(chǔ)在棧中,如果是成員變量那么久跟隨成員對(duì)象存儲(chǔ)在堆中。比如
class A{String str = new String(“abc”) public void getA(){return str;}}以上變量str存儲(chǔ)在堆中class A{public void getA(){String str = new String(“abc”) return str;}}以上變量str存儲(chǔ)在棧中String str = "a"+"b";產(chǎn)生幾個(gè)對(duì)象?答案是3個(gè),字符串常量區(qū)存儲(chǔ)"a","b","ab"三個(gè)對(duì)象
String str = "a"+new String("b");產(chǎn)生幾個(gè)對(duì)象?答案是3個(gè),字符串常量區(qū)存儲(chǔ)"a","b",堆中存儲(chǔ)new String("b")的對(duì)象。
聲明:
只有使用引號(hào)包含文本的方式創(chuàng)建的String對(duì)象之間使用“+”連接產(chǎn)生的新對(duì)象才會(huì)被加入字符串池中。對(duì)于所有包含new方式新建對(duì)象(包括null)的“+”連接表達(dá)式,它所產(chǎn)生的新對(duì)象都不會(huì)被加入字符串池中
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注