2013-01-24 50 views
1

可能重複:
How many java objects generated by this code? and why?多少對象在下面的字符串是在Java中創建

我很困惑在以下

String s1 = new String("Java"); 
String s2 = new String("Java"); 

有多少個對象在這裏創建?

String s1 = new String("Java"); 
String s2 = new String("Ruby"); 

這裏創建了多少個對象?

String s1 = new String("Java"); 
String s2 = "Java"; 

這裏創建了多少個對象?

String s1 = "Java"; 
String s2 = "Java"; 

這裏創建了多少個對象?

+1

我不知道,但我認爲這是3,4,2,1 – Augusto

+0

@Augusto你怎麼想的第一個? –

+1

編碼器:你的問題讓我谷歌對此予以肯定,你可以找到相當不錯的解釋[這裏](http://www.xyzws.com/Javafaq/what-is-string-literal-pool/3)。如果您編寫一些代碼來檢查字符串是否相同,則可以使用'=='運算符輕鬆測試。 – Augusto

回答

0

你的代碼,第一部分:創建

2的對象。 如果「Java」在字符串池中不存在,則會創建一個字符串並將其添加到那裏。

你的代碼第2部分:創建

2對象,如果沒有的「Java」,也不是「紅寶石」出現在字符串池,創建並添加了這兩個字符串。

你的代碼第3部分:創建

一個對象。並執行相同的條件以添加到字符串池。

你的代碼第四部分:

只有一個創建的對象,如果「Java」的不存在的字符串池。否則不會創建新的對象。

+1

你的答案是錯的,嘗試運行一些代碼來證明你的價值,你會看到,它是不正確的。 – Augusto

+0

回答有什麼問題?我不算數字符串添加到字符串池,但只有堆上的對象。 – Azodious

+1

@Azodious彙集字符串很可能是在堆上太(他們是在熱點1.7+)。 – assylias

-1
String s1 = new String("Java"); 
String s2 = new String("Java"); 

它會在堆中創建2個對象。

String s1 = new String("Java"); 
String s2 = new String("Ruby"); 

這將在堆中創建2個對象。

String s1 = new String("Java"); 
String s2 = "Java"; 

這將在第一行的堆中創建一個對象。在游泳池 對於第二行,它會檢查的「Java」不管是在字符串池中存在或存在not.If,它不會產生一個新的string.It將返回參照已有的字符串

String s1 = "Java"; 
String s2 = "Java"; 

第一行會檢查字符串池中是否存在「Java」。如果存在,則不會創建新的字符串。它將返回對池中已有字符串的引用。 第二行將獲得對已經創建的字符串的引用。因此,沒有新的對象,如果「Java」的存在,或者最多一個對象

+0

在最後一段中提到的第一行沒有檢查任何內容。字符串*在字符串池中,由編譯器和類加載器放在那裏。 – EJP