1. 程式人生 > 程式設計 >String s = new String('a ') 到底產生幾個物件

String s = new String('a ') 到底產生幾個物件

老生常談的一個梗,到2020了還在爭論,你們一天天的,哎哎哎,我不是針對你一個,我是說在座的各位都是人才!

String s = new String('a ') 到底產生幾個物件

上圖紅色的這3個箭頭,對於通過new產生一個字串(”宜春”)時,會先去常量池中查詢是否已經有了”宜春”物件,如果沒有則在常量池中建立一個此字串物件,然後堆中再建立一個常量池中此”宜春”物件的拷貝物件。

也就是說準確答案是產生了一個或兩個物件,如果常量池中原來沒有 ”宜春”,就是兩個。反之就是一個。

是的!如果面試官問到,回答一個或兩個即可,但是…畢竟…畢竟

畢竟我和各位都是人才,java知識底蘊不能如此短淺,這題還沒謝幕我們還能對面試官多嗶嗶幾句:字串常量池在不同版本的jvm中可能位置不同

那麼String s=new String("a"+"b");建立了幾次物件?

當jvm 看到 "a","b"時候 各建立了一次物件,"a"+"b"又建立了一個新的串,新的物件,new 建立了一個物件在堆,所以一共建立四次物件.

String a="sss";

這是之前我的理解 不知道對不對 大家看看評論第二條,是另一種理解。如果我們是為了應付面試可以兩者結合來說,如果自己鑽研 還是動手多操作看看 ~~在不同的jdk版本可能有不同的結果

例子:a="bbb";

String 不是不可變物件嗎 ?是怎麼賦值的呢?

String 是不可變物件,當jvm看到"sss"時把引用賦給a,當 jvm看到"bbb"的時候,又建立了新的物件,把新的引用返回給a,而原來的"sss"還是不變的.

到此這篇關於String s = new String(" a ") 到底產生幾個物件的文章就介紹到這了,更多相關String s = new String(" a ")內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!