Java StringBuffer何时将字符串添加到字符串池?
当我使用Java StringBuffer何时将字符串添加到字符串池?,java,stringbuffer,Java,Stringbuffer,当我使用new定义StringBuffer变量时,该字符串不会添加到字符串池中,对吗 现在,当我定义另一个StringBuffer而不是new时,我突然将它定义为StrPrev.append(“XXX”)(或者我的大学老师这么说)。为什么呢?是什么让这个字符串突然变成了字符串池字符串?实际上你的老师指的是XXX。这会转到StringPool,因为java程序中编写的所有字符串文本在执行时都会转到StringPool…实际上,您的老师指的是XXX。这会转到StringPool,因为java程序中编
new
定义StringBuffer
变量时,该字符串不会添加到字符串池中,对吗
现在,当我定义另一个
StringBuffer
而不是new
时,我突然将它定义为StrPrev.append(“XXX”)
(或者我的大学老师这么说)。为什么呢?是什么让这个字符串突然变成了字符串池字符串?实际上你的老师指的是XXX
。这会转到StringPool,因为java程序中编写的所有字符串文本在执行时都会转到StringPool…实际上,您的老师指的是XXX
。这会转到StringPool,因为java程序中编写的所有字符串文本在执行时都会转到StringPool…StrPrev中的“XXX”。append(“XXX”)是在类加载时(包含代码的类的类加载时)插入的字符串文本
StringBuffer
不会将“XXX”添加到池中
从:
此外,字符串文字总是引用类的同一实例
一串这是因为字符串文字,或者更一般地说,字符串
这些是常量表达式(§15.28)的值,是“内部的”
以便共享独特的实例
从:
加载包含字符串文字的类或接口
(§3.10.5)可以创建一个新的字符串对象来表示该文本。
(如果相同的字符串以前被拘留过,则可能不会发生这种情况。)
(§3.10.5)。)
StrPrev.append(“XXX”)
中的“XXX”是在类加载时(包含代码的类的类加载时)插入的字符串文字
StringBuffer
不会将“XXX”添加到池中
从:
此外,字符串文字总是引用类的同一实例
一串这是因为字符串文字,或者更一般地说,字符串
这些是常量表达式(§15.28)的值,是“内部的”
以便共享独特的实例
从:
加载包含字符串文字的类或接口
(§3.10.5)可以创建一个新的字符串对象来表示该文本。
(如果相同的字符串以前被拘留过,则可能不会发生这种情况。)
(§3.10.5)。)
buf.append(“XXX”)
后跟buf.toString(),然后将字符串返回池中。池就位后,只有一个StringBuffer
对象。buf.append(“XXX”)
后跟buf.toString(),然后将字符串返回池中。池就位后,只会创建一个StringBuffer
对象
当我用new定义StringBuffer变量时,这个字符串不会添加到字符串池中,对吗
创建StringBuffer
根本不会创建String
现在,当我定义另一个StringBuffer而不是new时,我将它定义为StrPrev.append(“XXX”),它突然变了
这完全令人困惑:
- 调用strBuff.append(“XXX”)
时,您没有定义新的StringBuffer
。您正在更新strubuff
引用的现有StringBuffer
。具体地说,您正在向缓冲区的末尾添加额外的字符
调用strBuff.toString()
时,只能从StringBuffer
中获得一个新的字符串
在String
上调用intern()
时,仅向字符串池添加String
。只有当池中没有相等的字符串时,才会将该字符串添加到池中
表示文字“XXX”
的字符串对象是字符串池的成员。但是,当类被加载时,而不是执行append
调用时,就会发生这种情况(即字符串被添加到池中)
(如果您的老师告诉您StringBuffer将字符串放入Java字符串池,那么他/她是错的。但是,考虑到您的描述相当混乱,我怀疑您实际上听错了或误解了老师真正说的话。)
当我用new定义StringBuffer变量时,这个字符串不会添加到字符串池中,对吗
创建StringBuffer
根本不会创建String
现在,当我定义另一个StringBuffer而不是new时,我将它定义为StrPrev.append(“XXX”),它突然变了
这完全令人困惑:
- 调用strBuff.append(“XXX”)
时,您没有定义新的StringBuffer
。您正在更新strubuff
引用的现有StringBuffer
。具体地说,您正在向缓冲区的末尾添加额外的字符
strBuff.toString()
时,只能从StringBuffer
中获得一个新的字符串
String
上调用intern()
时,仅向字符串池添加String
。只有当池中没有相等的字符串时,才会将该字符串添加到池中“XXX”
的字符串对象是字符串池的成员。但是,当类被加载时,而不是执行append
调用时,就会发生这种情况(即字符串被添加到池中)(如果您的老师告诉您StringBuffer将字符串放入Java字符串池,那么他/她是错的。但是,鉴于您的描述相当混乱,我怀疑您实际上听错了或误解了老师真正说的内容。)所有字符串常量都将放入该池,就像“XXX”StringBuffer从未添加到字符串池一样。在您的问题中,编译器在编译时识别文本字符串“XXX”,并将其添加到字符串池中