關於String a=new String("abc")與String a="abc"的各創建了幾個對象

兩種創建方式如下所示:
在這裏插入圖片描述
  String a =new String(“abc”)實際上是創建了兩個對象(假設之前String的常量池中沒有創建任何對象),一個是“abc”,是new String()。“abc”創建後就會放入常量池中(下次創建 String對象時先查找常量池 有需要的就使用, 沒有就重新創建並存入常量池),如果常量池中有的話,則就創建了一個new的對象,每new一次就創建一個對象。而String a=new String(“abc”)這是在堆裏面創建了一個空白對象 ,並將a初始化(如圖),在去查找常量池是否有“abc”。因之前已創建,所以就直接使用常量池中的“abc”的一份拷貝(副本)放人對應堆中地址(這兩塊內存中的內容是一眼的,用equals()可以得出)。

所以正確的爲一個或者兩個。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章