好吧,我有这样的代码
String s = "hello";
String s2 = s + "world";
我知道变量 s 存储在String Literal Pool的Java堆中。另外我知道变量 s2 存储在Java堆中(因为' +'在此示例中创建了一个新对象)。但我的问题是:将会"世界"被放入游泳池还是什么都不会发生?
答案 0 :(得分:2)
是的,它会。无论何时/何时,你都声明了一个字符串文字,它显然会进入池中,无论它是否被使用。
答案 1 :(得分:0)
由于池中不存在String
“world”,新的String
对象将实例化,然后将其放置在池中。
当我们使用双引号创建String
时,它首先在String
池中查找具有相同值的String
,如果发现它只返回引用,否则它会创建一个新的池中的String
然后返回引用。
答案 2 :(得分:0)
基本上,''和' s2'只是参考,而真正的对象是"你好"和"世界"。这遵循指定字符串是不可变的概念,而字符串引用则不是。所以,是的,作为"世界"是String对象,除了是一个String文字之外,它将存储在类似于hello的堆中。还记得没有' s'也不是' s2'将堆转换为可变的字符串引用。