【问题标题】:objects in String constant pool in javajava中字符串常量池中的对象
【发布时间】:2015-05-16 06:54:46
【问题描述】:
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 个对象

【问题讨论】:

  • 请参考 SO 上的 750 个“此代码创建了多少个字符串”问题中的任何一个。其中有几个对发生的事情有非常详尽的描述,我们最不需要的就是另一个。
  • @RealSkeptic,我的立场是正确的。

标签: java scjp ocpjp


【解决方案1】:
  1. s = "Fred"
  2. s = s+47; => s = Fred47
  3. s = s.substring(2,5); => s = ed4
  4. s = s.toUpperCase(); => s = ED4

【讨论】:

  • @Aniket:我想出了同样的方法,它加起来最多 4 个对象,但答案是只创建了 3 个对象并且你发布了同样的东西
【解决方案2】:

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

【讨论】:

  • 谁能解释我投反对票的原因?我说错了吗
  • 很抱歉,由于投反对票,我不得不将其作为答案删除,这让我认为您的答案可能是错误的。是的,即使我已经接受它作为答案,我也希望人们发表评论而不是仅仅投反对票
猜你喜欢
  • 2023-03-22
  • 1970-01-01
  • 2011-07-24
  • 1970-01-01
  • 1970-01-01
  • 2014-09-14
  • 1970-01-01
  • 2014-06-08
  • 2012-12-18
相关资源
最近更新 更多