如果是字符串文字:-
String s = "happ"
s = s.concat("y") //line1
答案 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" />
是的,没关系。在这里只保留文字,而不是动态构造的值(除非明确保留)。