2014-10-01 206 views
0

其實我有點困惑,在下面的「代碼處理」中創建了多少對象。在創建字符串對象時創建了多少對象

String s=new String("A"); 
s=s+"B"; 

其實有人說在這裏會創建4個對象,但是在整個處理過程中卻不明白。

請誰能給我詳細描述還包括存儲部分,例如串池等

+4

這看起來像是一個認證問題;)您通過了嗎? – vikingsteve 2014-10-01 12:36:59

+0

我猜'字符串s =新的字符串是一個,''「A」是另一個,「B」是一個和連接運算符'+'將創建第四個 – 2014-10-01 12:37:03

+0

不是直接重複,因爲這樣會問創建了許多'objects',這大概可以包含'StringBuilder',也可以按照其他人的評論。 – vikingsteve 2014-10-01 12:52:11

回答

2

您有兩個String文字對象,即"A""B"。然後你用new String("A");顯式實例化一個新的「A」實例。最後,在執行String級聯時創建第四個實例s+"B"

+0

s +「B」後面的StringBuilder? – TheLostMind 2014-10-01 12:41:41

+0

@TheLostMind StringBuilder實例或其他一些實例的「B」會產生一個新的「String」實例(並可能實例化一個新的StringBuilder)。如果我們在每個'String'實例中計算字符數組,我們可以得到更多的'Object'實例。 – 2014-10-01 12:44:05

+0

也許你是對的..在這種情況下,支持StringBuilder的數組也必須計數,並且String的長度也會改變。但是4是*可訪問的*數目的對象。 :P – TheLostMind 2014-10-01 12:53:22

6
  • 創建的第一個String是文字"A",也就是說,如果沒有實習 之前。
  • 第二個String是由new關鍵字生成的實例。
  • 第三個是字面"B",再次,如果之前沒有實習。
  • 最後一個是s"B"的拼接。
+0

正確。值得注意的是圍繞「A」的'new String()'是多餘的。 – vikingsteve 2014-10-01 12:38:30

+0

@vikingsteve絕對。我也同意這看起來像1Z0-803的問題,就像你在評論中提到的那樣:) – Mena 2014-10-01 12:39:26

+0

還會有一個StringBuilder對象被創建。共5個對象 – TheLostMind 2014-10-01 12:40:54