1. 程式人生 > >Java中String物件建立

Java中String物件建立

文章目錄


在開始之前我沒了解一下什麼叫做字串駐留

當同時建立多個相同的字串直接量是,只有一個字串常量被儲存在執行時常量池中。

如:

String a="abc";
String b="abc";
//String c=new String("abc");

此時同時建立了兩個String物件(用雙引號的方式),此時在執行時常量池中只有一個"abc"。對於String c=new String(“abc”),可以通過c.intern()獲取c在執行時常量池裡面的字串駐留物件"abc",所以

String a=new String("abc");
String b=new String("abc");
System.out.println(a==b);//false
System.out.println(
a.intern()==b.intern());//true

1 String a="abc"與String b=new String(“abc”)一樣嗎,難道也是語法糖???

首先是不一樣的,不是語法糖。我們看一下以下程式碼:

 public static void main(String[] args) {
    	String a="abc";
    	String b="abc";
    	String c=new String("Hello world");
    	String d=new String("abc");
    	int length="abc".
length(); }

位元組碼:
在這裡插入圖片描述

從位元組碼中可以看到,String a=“abc"只建立了一個物件(就是”abc”,在執行時常量池)。然而String a=new String(“abc”)會建立額外的物件,看見new沒有(意思是在堆上有建立了一個物件)。

a,b兩個物件都是用ldc指令將常量"abc"(本身就是一個String型別)載入進運算元棧的,所以a==b是true。然而String d=new String(“abc”)會在堆中新new一個String物件,所以d==b為false。

通常建立String物件時,推薦使用雙引號這種方式。因為new的方式會額外建立一個物件。

2 String a="abc"要建立幾個物件??

通過上面的解釋,現在我們就知道了String a=“abc"會建立一個物件(在執行時常量池),而String a=new String(“abc”)會建立兩個物件(一個在執行時常量池的"abc”,一個在堆裡面)。需要注意的是這是在String a="abc"與String a=new String(“abc”)不同時出現的情況下。

3 String a=“abc”;String b=new String(“abc”)又要建立幾個物件???

其實理解上面的這個就好懂了。此時,String a="abc"與String b=new String(“abc”)是同時出現的。那麼總共會建立2個物件。

首先String a="abc"在執行時常量池中建立了一個物件。而當String b=new String(“abc”)時,已經知道了執行時常量池中有一個物件"abc"了,那當然就不用在常量池中新建立一個“abc”咯!。只用在堆中建立一個物件就行了。

4 String a=“abc”;String b=“abc”;那麼a==b嗎???

那當然為true哦。正如前面所講的,a與b都指向了執行時常量池中的"abc",所以那當然為true了。

5 參考

字串駐留