Java中的字符串表现不同

时间:2018-09-22 21:41:32

标签: java string

如果是字符串文字:-

String s = "happ"

s = s.concat("y")  //line1

2 个答案:

答案 0 :(得分:4)

在您的第一个示例中:

  String s = "happ";
  s = s.concat("y");

在执行这些语句时 1 ,已经在字符串池中创建了String对象 来表示(分别){{1} }文字和"happ"文字。

第二条语句的执行将创建一个新的"y"对象,该对象表示字符串String。该对象不在字符串池中。


  

我想特别澄清这个疑问,即对池或堆中的字符串进行操作时,字符串将concat方法的结果存储在何处。

它是在堆 2 中创建的,而不是在字符串池中创建的。具体来说。

"happy" API中在字符串池中创建对象的唯一方法是String。 (其中包括构造函数。)


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

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

答案 1 :(得分:1)

让我们尝试一下。

/// <reference path="./Game.d.ts" />

是的,没关系。在这里只保留文字,而不是动态构造的值(除非明确保留)。