1. 程式人生 > >new String(“abc”)建立了幾個物件

new String(“abc”)建立了幾個物件

String a = “abc”;

String b = new String("abc");

這兩種宣告方法得到的String是不一樣的,第一種宣告方法得到的String是儲存在String常量池裡面的,而第二種方式的宣告很明顯是正常的建立一個物件的使用方法,所以儲存在堆中。

當String類直接賦值時,如果常量池記憶體在這個字串,則s1直接指向常量池的地址,若沒有,則先在常量池內建立這個字串物件,s1直接指向常量池這個字串的記憶體地址; 當String類使用new例項物件時,首先在堆裡建立這個物件,若是常量池內沒這個字串,則也建立一個,然後堆裡的物件的value指向常量池內的字串。 

所以答案是一個或者兩個,如果常量池中原來有”abc”,則建立一個物件;如果常量池中原來沒有”abc”,那麼會建立兩個物件