【问题标题】:Why 2 String created using concat function and same strings are having object reference different?为什么使用 concat 函数创建的 2 个字符串和相同的字符串具有不同的对象引用?
【发布时间】:2020-01-18 15:05:12
【问题描述】:

我的代码:

class TestStringConcatenation{
 public static void main(String args[]){

   String s1="Sachin ";
   String s2="Tendulkar";

   String s3=s1.concat(s2);
   String s4=s1.concat(s2);

   System.out.println(s4==s3);
  }
}

输出:

false

concat 函数是否没有将 String 对象保存在字符串常量池中?

【问题讨论】:

  • 因为它们是不同的对象,即使它们代表相同的文本。 “concat 函数是否没有将字符串对象保存在字符串常量池中?”那是对的。为什么会呢?字符串池的重点是缓存可重用的字符串,就像在for (..){ print("foo");} 的情况下,我们可以重用“foo”而不是在每次迭代中重新创建它。但是现在假设我们有for(int i=0; i<SIZE; i++){print("foo".concat(Integer.toString(i));},每次迭代都会创建自己的“foo1”“foo2”,缓存它们有意义吗?
  • "concat 函数是否没有将 String 对象保存在字符串常量池中?" - 显然不是。
  • T.J.克劳德的答案是正确的,因为它解决了您的直接问题
  • 另请注意,依赖引用相等会巧妙地使您的代码依赖于供应商,因为实习内容和时间的规则并不是一成不变的。

标签: java string concat


【解决方案1】:

concat 函数是否没有将 String 对象保存在字符串常量池中?

它没有将它存储在 intern 池中,不。 (constant pool 是另一回事。)只有字符串常量会被自动实习。如果你想要任何其他字符串,你必须通过调用intern来明确地做到这一点。

【讨论】:

    猜你喜欢
    • 2019-05-26
    • 1970-01-01
    • 2017-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多