字符串文字池

时间:2015-10-20 17:13:03

标签: java string pool

好吧,我有这样的代码

String s = "hello";
String s2 = s + "world";

我知道变量 s 存储在String Literal Pool的Java堆中。另外我知道变量 s2 存储在Java堆中(因为' +'在此示例中创建了一个新对象)。但我的问题是:将会"世界"被放入游泳池还是什么都不会发生?

3 个答案:

答案 0 :(得分:2)

是的,它会。无论何时/何时,你都声明了一个字符串文字,它显然会进入池中,无论它是否被使用。

答案 1 :(得分:0)

由于池中不存在String“world”,新的String对象将实例化,然后将其放置在池中。

当我们使用双引号创建String时,它首先在String池中查找具有相同值的String,如果发现它只返回引用,否则它会创建一个新的池中的String然后返回引用。

答案 2 :(得分:0)

基本上,''和' s2'只是参考,而真正的对象是"你好"和"世界"。这遵循指定字符串是不可变的概念,而字符串引用则不是。所以,是的,作为"世界"是String对象,除了是一个String文字之外,它将存储在类似于hello的堆中。还记得没有' s'也不是' s2'将堆转换为可变的字符串引用。