1)
String a = "abc";① String b = "abc";②
①代碼執行後在常量池(constant pool)中創建了一個值爲abc的String對象,②執行時,因爲常量池中存在"abc"所以就不再創建新的String對象了。
String c = new String("xyz");① String d = new String("xyz");②
3)
String s1 = new String("xyz"); //創建二個對象(常量池和棧中),一個引用 String s2 = new String("xyz"); //創建一個對象(棧中),並且以後每執行一次創建一個對象,一個引用 String s3 = "xyz"; //創建一個對象(常量池中),一個引用 String s4 = "xyz"; //不創建對象(共享上次常量池中的數據),只是創建一個新的引用
public class TestStr { public static void main(String[] args) { // 以下兩條語句創建了1個對象。"鳳山"存儲在字符串常量池中 String str1 = "鳳山"; String str2 = "鳳山"; System.out.println(str1==str2);//true //以下兩條語句創建了3個對象。"天峨",存儲在字符串常量池中,兩個new String()對象存儲在堆內存中 String str3 = new String("天峨"); String str4 = new String("天峨"); System.out.println(str3==str4);//false //以下兩條語句創建了1個對象。9是存儲在棧內存中 int i = 9; int j = 9; System.out.println(i==j);//true //由於沒有了裝箱,以下兩條語句創建了2個對象。兩個1對象存儲在堆內存中 Integer l1 = new Integer(1); Integer k1 = new Integer(1); System.out.println(l1==k1);//false
//以下兩條語句創建了1個對象。1對象存儲在棧內存中。自動裝箱時對於值從127之間的值,使用一個實例。 Integer l = 20;//裝箱 Integer k = 20;//裝箱 System.out.println(l==k);//true
//以下兩條語句創建了2個對象。i1,i2變量存儲在棧內存中,兩個256對象存儲在堆內存中 Integer i1 = 256; Integer i2 = 256; System.out.println(i1==i2);//false } }