为了账号安全,请及时绑定邮箱和手机立即绑定

java中的字符串表现不同

java中的字符串表现不同

芜湖不芜 2021-10-06 09:51:23
如果是字符串文字:-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 中创建的,而不是在字符串池中。具体来说。

StringAPI 中在字符串池中创建对象的唯一方法是String.intern(). (这包括构造函数。)


1 - 请注意我在这里仔细选择的词。如果是第一次执行语句,则字符串池中对象的创建可能是在语句执行过程中发生的。或者它可能以前发生过。确切的时间是特定于实现的。但是,JLS 保证对于相同的文字不会发生多次。

2 - 请注意,对于现代 HotSpot JVM,字符串池位于常规堆中。它不是一个单独的空间。字符串池实际上只是一个(JVM 私有的)数据结构。


查看完整回答
反对 回复 2021-10-06
  • 2 回答
  • 0 关注
  • 132 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信