2010-10-03 64 views
3

當談到字符串時,對於對象的情況我有點困惑,所以想知道使用下面的代碼創建多少個對象,以及關於字符串池和堆的一些關於String對象創建的解釋。如何知道將使用以下代碼創建多少個對象?

public static void main(String[] args) { 

    String str1 = "String1"; 

    String str2 = new String("String1"); 

    String str3 = "String3"; 

    String str4 = str2 + str3; 

    } 

回答

13

將創建4個對象。

有兩點需要注意:

  • new String("something")總是創建一個新的對象。字符串文字"something"只爲所有的事件創建一個對象。最佳實踐是從不使用new String("something") - 實例化是多餘的。
  • 兩個字符串的連接被轉換爲StringBuilder.append(first).append(second).toString(),所以在這裏創建另一個對象。
+5

第二點在這種情況下是正確的,但如果參數是編譯時間常量會變得更加困難。例如,我相信'String str1 =「foobar」; String str2 =「foo」+「bar」;'只有一個實例。 – 2010-10-03 18:12:26

+0

+1 Bozho *和* Mark – 2010-10-03 19:38:33

+0

@Bozho下列語句將創建多少個對象? '字符串a =「好」+「好運」;'3? – UnKnown 2016-03-14 13:06:19

1

每個str1,str2,str3,str4都是String對象。

str1:「String1」是一個字符串文字,Java在遇到字符串文字時創建一個String對象。

STR2:如您使用String類的String對象被創建

STR3的新的關鍵字和構造函數:類似STR1

STR4:連續字符串文字,類似於STR1

編輯:http://download.oracle.com/javase/tutorial/java/data/strings.html

+1

'str1','str2','str3'和'str4'是* not *對象,它們是對象引用。 – skaffman 2010-10-03 18:42:45