2015-10-11 77 views
0

下面是一個Java程序。該程序將創建多少個字符串對象

public String makinStrings() { 
String s = 「Fred」; 
s = s + 「47」; 
s = s.substring(2, 5); 
s = s.toUpperCase(); 
return s.toString(); 
} 

如何找出在String池中創建了多少個String對象。我認爲有4個對象是 - 「Fred」,「Fred47」,「ed4」,「ED4」。這是正確的假設嗎?

+0

你正在使用什麼版本的java –

+0

可能重複[將創建多少個字符串對象](http://stackoverflow.com/questions/7370593/how-many-string-objects-will-be-created) – xehpuk

回答

1

對於Java版本7:

  • 由於this topic+操作者創建新對象
  • 由於String referencethis topic
    • 子()創建一個新的字符串因爲字符串是不可變的
    • toUpperCase()創建一個新字符串因爲字符串是不可變的
    • 的toString()不會創建一個新的字符串但回到他本身

分配「弗雷德」開頭將不會創建新的對象,因爲它將取自literal pool

總結 - 3字符串已創建,每個方法調用。該字符串是一個對象,因此返回它不會創建新的 - 它通過引用完成。

+0

爲什麼你認爲'toUpperCase()'不會創建一個新的字符串? – xehpuk

+0

當然,它會 - 我已經被建議在參考文獻中沒有明確的信息。問題是重複的http://stackoverflow.com/questions/7370593/how-many-string-objects-will-be-created順便說一句,但我不能標記它的一些奇怪的原因 - 我編輯答案正確的一個(因爲我現在也不能刪除它......呃)。無論如何感謝您的警告 –