Java:字符串什么时候进入字符串const池?

时间:2016-09-21 08:11:46

标签: java string

这是我的代码:

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有什么区别吗?也许方法“追加”或......?

我将非常感谢您的协助。

2 个答案:

答案 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

连接两个字符串的结果将在堆内存上分配。