2015-05-14 60 views
0

正如我們所知,String是不可變的,這意味着每次都會創建一個新實例。java中的字符串對象

我的問題是,如果我寫的:

System.out.println("Java"+"is"+"programming"); 

那麼多少個對象在池中創建?

+5

當該代碼被編譯,它被轉換成一個字符串對象。試着反編譯這段代碼來看看這個。 – MJSG

+0

'這意味着每次都創建一個新實例'這不是真的 –

回答

-1

你的例子將創建一個單一的字符串對象。這是注意到throughoutJavadocumentation

我的理解是,Java只在最初創建時纔將新字符串添加到字符串池中。所以,

String str1 = "hello"; 

將在池中的單個字符串。

所以會

String str2 = "Java" + "is" + "cool"; 
+0

該對象是在字符串池中還是在字符串池的外部創建的, –

0

你的榜樣將創建字符串池中單個字符串對象。

在此之後,如果你這樣做:

String x = "Javaisprogramming"; 

它仍將指向字符串池中同一個對象。你可以閱讀更多here

-1

你的榜樣將創建「單」字符串僅是

String x = "Javaisprogramming"; 

因爲「+」在Java中的字符串連接運算符(它在內部調用的append()),所以當你打電話System.out.println("Java"+"is"+"programming");然後編譯器從串聯中創建一個字符串對象,並用println()方法發送它。

所有關於「+」運算看到此answer