我有以下Java代码:

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


问题很简单:调用此方法时将创建多少String个对象?

一开始我回答说创建了5个String对象,但是我的书回答说只有3个对象被创建并且没有给出解释(这是一个SCJP问题)。

从我的角度来看,有5个对象:
“ Fred”,“ 47”,“ Fred47”,“ ed4”,“ ED4”。

我也在SCJP模拟考试中找到了这个问题,答案是3。

最佳答案

“ Fred”和“ 47”将来自字符串文字池。因此,在调用该方法时将不会创建它们。相反,它们将在加载类时放到那里(或更早的时候,如果其他类使用具有相同值的常量)。

“ Fred47”,“ ed4”和“ ED4”是将在每次方法调用时创建的3个String对象。

09-25 23:35