繁体   English   中英

Java中的字符串常量池中的对象

[英]objects in String constant pool in java

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个。 我不明白为什么只有三个对象

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

是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个对象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM