java中String兩種實(shí)例化的區(qū)別

直接賦值:String str = "字符串";只會(huì)開辟一塊堆空間,并且會(huì)自動(dòng)保存再對(duì)象池以供下次重復(fù)使用。
構(gòu)造方法:String str = new String("字符串");會(huì)開辟兩塊堆內(nèi)存空間,其中一塊將成為垃圾,并且不會(huì)自動(dòng)進(jìn)入對(duì)象池,但是用戶可以用intern()方法手動(dòng)入池。


image.png

因?yàn)槊總€(gè)字符串都是String的一個(gè)匿名對(duì)象,所以首先會(huì)在堆內(nèi)存開辟一個(gè)堆空間保存字符串保存hello,然后使用new關(guān)鍵字,開辟另外一塊內(nèi)存空間。因此真正使用的是用關(guān)鍵字new開辟的堆內(nèi)存,而之前定義的字符串常量在堆內(nèi)不會(huì)有任何的棧內(nèi)存指向,江成為垃圾,等待GC回收,所以用構(gòu)造方法開辟字符串對(duì)象實(shí)際上會(huì)開辟兩塊空間,其中一塊成為垃圾。除了內(nèi)存的浪費(fèi),由于關(guān)鍵字new永遠(yuǎn)表示開辟新的堆內(nèi)存空間,所以不會(huì)保存在對(duì)象池中。不過可以手工入池,String str = new String("hello").intern() 。
在所有開發(fā)中,String對(duì)象的實(shí)例化永遠(yuǎn)都才用直接賦值的方式完成。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容