如果是字符串文字:-String s = "happ"s = s.concat("y") //line1
2 回答
斯蒂芬大帝
TA贡献1827条经验 获得超8个赞
在你的第一个例子中:
String s = "happ"; s = s.concat("y");
当这些语句被执行1 时,字符串池中已经创建了String
对象来表示(分别)文字和文字。 "happ"
"y"
第二条语句的执行创建了一个String
表示字符串的新对象"happy"
。此对象不在字符串池中。
我想特别澄清这个疑问,当对来自池和堆的字符串进行操作时,字符串将 concat 方法的结果存储在何处。
它是在堆2 中创建的,而不是在字符串池中。具体来说。
String
API 中在字符串池中创建对象的唯一方法是String.intern()
. (这包括构造函数。)
1 - 请注意我在这里仔细选择的词。如果是第一次执行语句,则字符串池中对象的创建可能是在语句执行过程中发生的。或者它可能以前发生过。确切的时间是特定于实现的。但是,JLS 保证对于相同的文字不会发生多次。
2 - 请注意,对于现代 HotSpot JVM,字符串池位于常规堆中。它不是一个单独的空间。字符串池实际上只是一个(JVM 私有的)数据结构。
添加回答
举报
0/150
提交
取消