2015-10-11 52 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顺便说一句,但我不能标记它的一些奇怪的原因 - 我编辑答案正确的一个(因为我现在也不能删除它......呃)。无论如何感谢您的警告 –