堆内存和字符串池之间的区别

时间:2017-01-28 09:40:55

标签: java string

Java中的堆内存和字符串池有什么区别?

in this link,据说:

String s1 = "Hello";

String s2 = new String("Hello");

s1指向String Pool的位置 和 s2指向堆内存位置。

2 个答案:

答案 0 :(得分:14)

StringPool 是JVM用来避免冗余生成String对象的区域。

那些可以回收的物品,所以你可以使用它们不浪费太多的记忆

考虑这个例子:

String s1 = "cat";

String s2 = "cat";

String s3 = new String("cat");
JVM 非常智能,可以看到对象 s2 已经在内存中,因此它不是创建新对象并浪费新的内存位置,而是分配分配给 s1

的相同内存的引用

enter image description here

答案 1 :(得分:4)

当您使用String s = "Hello"; Sting s2= "Hello"时,您会获得ss2的相同副本。但是,当您执行String s = new String("Hello"); String s2 = new String("Hello")时,堆中的ss2会有不同的副本。