使用new运算符创建的String是否驻留在Heap和String池上?
或者可能有人可以指向某个文档或链接,这将指导我字符串池的行为?
答案 0 :(得分:2)
java代码中的字符串文字驻留在字符串池中,但使用new创建的字符串文字不会。
String Pool是一种缓存,也存储在堆中。
答案 1 :(得分:1)
案例1 -
String s1="world";
String s2="india";
String s3="world";
这里将在Pool中创建两个对象。 s1和s3将指向同一个对象。 字符串文字转到池内存。
案例2 -
String s1=new String("world");
String s2=new String("india");
String s3=new String("world");
这里将在堆上创建三个对象。
新词使用堆内存来创建对象。
希望我能说出来。请参阅link了解更多详情。
答案 2 :(得分:0)
使用new运算符创建的字符串驻留在Heap而不是字符串池中(字符串池也存在于堆内存中)。
但是您可以使用String.intern()
将该对象移动到池中。
在String上调用String.intern()
后,如果使用new
关键字创建的String已存在于池中,则将返回池化对象的引用。所以现在它将指向汇集的对象而不是之前的对象。
更多details
答案 3 :(得分:0)
实际上没有任何承诺。
编译器/ JVM可能决定在字符串池中创建它,也可以在neap上创建它。 今天它可能会在String文字池中创建字符串,明天在JVM更新后它可以在堆上创建它们,完全相同的代码。
关键是你的代码不应该依赖来创建字符串。
例如 - 避免使用==运算符来比较字符串值。