使用new构造的String对象在哪里除了堆之外?

时间:2013-04-02 10:02:31

标签: java string

使用new运算符创建的String是否驻留在Heap和String池上?

或者可能有人可以指向某个文档或链接,这将指导我字符串池的行为?

4 个答案:

答案 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更新后它可以在堆上创建它们,完全相同的代码。

关键是你的代码不应该依赖来创建字符串。

例如 - 避免使用==运算符来比较字符串值。