这是我的代码:
String s = new String("1"); // here I know that "1" is created in const pool
String s2 = new String("1") + new String("1");
此代码中是否在字符串池中创建了“11”?如果没有,我应该调用s2.intern()
将“11”放入字符串池吗?
-------------- udapte 22/9/2016 ---------------------
我有些事让我困惑: new Stirng(“1”)和 new String(“1”)+ new String(“1”)都会调用相同的本机方法 System.arraycopy < / em>我从JDK6学习。
现在为什么在字符串池中会创建“1”,但“11”不是? StringBuilder有什么区别吗?也许方法“追加”或......?
我将非常感谢您的协助。
答案 0 :(得分:1)
但&#34; 11&#34;在此代码中立即在const池中创建?
没有。它不会在String常量池中创建。 StringBuilder
将用于将两个"1"
连接在一起,形成"11"
,它将在堆上。
我应该调用s2.intern()将
11
放到const池吗?
是。如果要放置intern
(通过在String常量池中添加2 11
s(而不是文字"1"
),则应显式调用"11"
。
答案 1 :(得分:0)
不会在公共池中创建字符串。 new运算符将使JVM为新的字符串文字分配内存&#34; 1&#34;在堆内存中。
String s1 = "1"; // Common pool
String s2 = new String("1"); // heap allocated memory
在你的例子中:
String s2 = new String("1") + new String("1");
关于你的问题:https://www.ntu.edu.sg/home/ehchua/programming/java/J3d_String.html
连接两个字符串的结果将在堆内存上分配。