新的String()是否在Java中更新字符串池?

时间:2014-04-03 09:01:47

标签: java string

如果我写这样的话:

String s1 = new String("ABC");
String s2 = "ABC";

字符串池在哪些场景中更新?第一个,第二个还是两个?

提前致谢

3 个答案:

答案 0 :(得分:3)

  

在上面的编程代码中,字符串池何时更新?

第一个语句将使用"ABC" String literal更新/添加到String池,但是在堆中创建另一个对象,变量s1将引用堆对象。

第二个语句将引用已创建的Pool String对象。

答案 1 :(得分:1)

String s = new String("ABC");

这总是在堆上创建一个新的String对象并添加" ABC"到游泳池(如果没有)。

String s= "ABC";

而这一行被称为字符串文字。它检查字符串池是否已经具有相同的字符串" ABC"或不。如果存在则s将引用该对象,否则将创建新对象。

结论:new String()将始终创建一个新对象,字符串文字在创建字符串池之前检查它。

答案 2 :(得分:1)

 String s1=new String("ABC");//creates two objects and one reference variable  

在您的情况下,JVM将在普通(非池)堆内存和文字" ABC"中创建一个新的String对象。将放在字符串常量池中。变量s1将引用Heap(非池)中的对象。

String Constant Pool

  

使用new运算符创建的字符串对象不引用对象   在字符串池中,但可以使用String的intern()方法。   java.lang.String.intern()返回一个interned String,即一个   在全局字符串文字池中有一个条目。如果是String   还没有在全局字符串文字池中,它将被添加。

enter image description here

每当你使用new关键字创建String对象时,它将在Heap中创建,然后它将检查字符串常量池中是否有相同的字符串文字。如果SCP不包含该字符串文字那么只有它将创建字符串SCP的字面意思。