如果我写这样的话:
String s1 = new String("ABC");
String s2 = "ABC";
字符串池在哪些场景中更新?第一个,第二个还是两个?
提前致谢
答案 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(非池)中的对象。
使用new运算符创建的字符串对象不引用对象 在字符串池中,但可以使用String的intern()方法。 java.lang.String.intern()返回一个interned String,即一个 在全局字符串文字池中有一个条目。如果是String 还没有在全局字符串文字池中,它将被添加。
每当你使用new关键字创建String对象时,它将在Heap中创建,然后它将检查字符串常量池中是否有相同的字符串文字。如果SCP不包含该字符串文字那么只有它将创建字符串SCP的字面意思。