首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >StringBuffer何时将字符串添加到字符串池?

StringBuffer何时将字符串添加到字符串池?
EN

Stack Overflow用户
提问于 2013-04-01 23:12:10
回答 4查看 1.5K关注 0票数 0

当我用new定义一个StringBuffer变量时,这个字符串不会被添加到字符串池中,对吧?

现在,当我定义另一个StringBuffer但不是使用new时,我突然将它定义为StrPrev.append("XXX") (或者我的大学老师是这样说的)。为什么会这样呢?是什么让这个字符串突然变成了string-pool字符串?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-04-01 23:33:09

当我用StringBuffer定义一个新变量时,这个字符串不会被添加到字符串池中,对吧?

创建StringBuffer根本不会创建String

现在,当我定义另一个新的StringBuffer而不是使用

时,我突然将它定义为StrPrev.append("XXX")。

这完全是令人困惑的:

  • 当你调用strBuff.append("XXX")时,你并没有定义一个新的StringBuffer。您正在更新strBuff引用的现有StringBuffer。具体地说,您是在缓冲区的末尾添加额外的字符。仅当您调用strBuff.toString().
  • You时,才会从StringBuffer中获得新的String仅当您在String上调用intern()时,才会将一个添加到字符串池中。只有在池中还没有相等的字符串时,才会将字符串添加到池中。
  • 表示文字"XXX"的string对象是字符串池的成员。但这种情况发生在装入类时(即字符串被添加到池中),而不是执行append调用时。

(如果您的老师告诉您StringBuffer将字符串放入Java字符串池,那么他/她就错了。但是,考虑到你相当模糊的描述,我怀疑你实际上误听或误解了你老师真正说的话。)

票数 3
EN

Stack Overflow用户

发布于 2013-04-01 23:18:30

StrPrev.append("XXX")中的"XXX“是在类加载时(包含代码的类的类加载时间)实例化的字符串。

"XXX“不是由StringBuffer添加到池中。

JLS section 3.10.5

此外,String文本总是引用类string的同一实例。这是因为字符串文字--或者更一般地说,是常量表达式的值的字符串(§15.28) --被“内嵌”以便共享唯一的实例

JLS section 12.5

加载包含字符串文字(§3.10.5)的类或接口可能会创建一个新的字符串对象来表示该文字。(如果相同的字符串之前已被截获(§3.10.5),则可能不会发生这种情况。)

票数 1
EN

Stack Overflow用户

发布于 2013-04-01 23:13:40

实际上,你的老师指的是XXX。因为在java程序中编写的所有字符串字面值在执行时都会转到StringPool……

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15746018

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档