当前位置: 首页 > 知识库问答 >
问题:

StringBuilder方法。append(),已更改字符串的结果。实习生()[重复]

丁善
2023-03-14
String s1 = new StringBuilder("dsada").append("dfgdfgd").toString();
String s3 = new StringBuilder("aaaa").toString();

System.out.println(s1.intern() == s1);  //true
System.out.println(s3.intern() == s3);  //false

s1和s3最终调用StringBuilder。toString,方法toString()控制一个新字符串(),然后调用该字符串。intern(),结果不同,这让我很困惑。

  @Override
public String toString() {
    // Create a copy, don't share the array
    return new String(value, 0, count);
}

共有1个答案

卫嘉泽
2023-03-14

来自https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/String.html#intern():

如果池中已经包含了一个字符串,该字符串与由equals(object)方法确定的该字符串对象相等,那么将返回池中的字符串。否则,此字符串对象将添加到池中,并返回对此字符串对象的引用。

“aaaa”是代码中的字符串文字,因此它已经在内部池中。当您对值为“aaaa”的字符串调用intern()时,它将返回从池中检索到的现有字符串对象。这与s3的对象不同。

“dsadadfgdfgd”在代码中不是字符串文字,因此当您调用intern()时,它会将该字符串对象添加到池中,然后返回相同的对象。

 类似资料:
  • 问题内容: 使用此代码: 当我使用StringBuilder运行代码时,出现错误消息 尝试了StringBuffer,它可以工作。StringBuffer对象的内容被编译为“ Java和Eclipse ..”。 } 问题答案: 确实 有一个接受a 作为参数 的构造函数,并且 确实 有一个方法(由于实现了它必须实现)。 结论:这是您的IDE中的一个不幸,它没有导入正确的。您使用的另一个库具有不幸的“

  • 我现在正在学习Java,我读到了这个问题:什么是Java字符串实习堆栈溢出 但我阅读了其他文章,其中提供了一些我不理解的示例: Java 11中的结果(在Java 8中应该相同)是: 我不知道为什么结果不同,我想这都是真的。有人能解释一下吗?

  • 我无法理解方法提供程序按字符串类的用法。 我读了那个内部编译器做了一个实习生,但是在哪个对象上呢?编译器怎么知道他必须为做实习生才能创建? 这里和有什么区别?两者总是一样吗?如果是,Java的方法有什么特别之处?

  • 问题内容: 我只是尝试使用该方法。而且它不起作用。 HTML: JS: 结果:我得到“ r”,而我想得到“ t” 知道为什么它不起作用? 问题答案: (JavaScript函数,而不是jQuery)返回字符串,请尝试以下操作:

  • 以下是Java中的代码: 输出:输入字符串:夫人 J=女士 错误的 为什么此代码的输出为false?

  • 我有一个字符串a如下 我想用拆分这个字符串。所以我使用了以下代码来拆分它 获得: 需要< code>split.length: 我不明白我做错了什么。无论我使用什么正则表达式,我都得到相同的结果。此外,我无法修改字符串。 谁能帮我把作为数组长度。