java中的String常量池中的对象

时间:2015-05-16 06:54:46

标签: java scjp ocpjp

public class NewClass {

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

上述程序中创建了多少个对象?转换为大写字符串后,我看到4个对象,但根据scjp书,答案是3。我不明白怎么只有3个物体

2 个答案:

答案 0 :(得分:0)

  1. s = "Fred"
  2. s = s+47; => s = Fred47
  3. s = s.substring(2,5); => s = ed4
  4. s = s.toUpperCase(); => s = ED4

答案 1 :(得分:-1)

是3个对象

    String s = "Fred";             // created in pool
    s = s + "47";                  // created in heap
    s = s.substring(2, 5);         // created in heap
    s = s.toUpperCase();           // created in heap

如果您看到substring()toUpperCase()的来源,则会返回一个新字符串s + "47";,因为s的值是在运行时确定的,因此它将创建新的字符串共有3个物体。