将创建多少个String对象

Ram*_*ona 6 java scjp

我有以下Java代码:

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

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

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

从我的观点来看,有5个对象:"Fred","47","Fred47","ed4","ED4".

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

Joa*_*uer 15

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

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