String s = new String(“xyz”)產生幾個對象?

      【https://www.toutiao.com/i6500028613331517965/】 

      對於字符串:其對象的引用都是存儲在棧中的,如果是【編譯期已經創建好(直接用雙引號定義的)的就存儲在常量池中】,如果是【運行期(new出來的)才能確定的就存儲在堆中】。對於equals相等的字符串,在常量池中永遠只有一份,在堆中有多份。


如以下代碼:

Java代碼


String s1 = "china";

String s2 = "china";

String s3 = "china";

String ss1 = new String("china");

String ss2 = new String("china");

String ss3 = new String("china");



String s=new String("china");

s 是對象的引用,存放在棧中,棧是存放基本類型的變量數據和對象的引用 

new String("china");是對象本身(也就是對象),存放在堆(new 出來的對象) 。

"china" 存放在常量池,(字符串常量對象存放在常量池中) 。

這裏解釋一下黃色這3個箭頭,對於通過new產生一個字符串(假設爲”china”)時,會先去常量池中查找是否已經有了”china”對象,如果沒有則在常量池中創建一個此字符串對象,然後堆中再創建一個常量池中此”china”對象的拷貝對象。

這也就是有道面試題:String s = new String(“xyz”);產生幾個對象?一個或兩個,如果常量池中原來沒有”xyz”,就是兩個。


發佈了71 篇原創文章 · 獲贊 36 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章