Java中的堆内存和字符串池有什么区别?
in this link,据说:
String s1 = "Hello";
String s2 = new String("Hello");
s1指向String Pool的位置 和 s2指向堆内存位置。
答案 0 :(得分:14)
StringPool 是JVM用来避免冗余生成String对象的区域。
那些可以回收的物品,所以你可以使用它们不浪费太多的记忆
考虑这个例子:
String s1 = "cat";
String s2 = "cat";
String s3 = new String("cat");
JVM 非常智能,可以看到对象 s2 已经在内存中,因此它不是创建新对象并浪费新的内存位置,而是分配分配给 s1 的相同内存的引用
答案 1 :(得分:4)
当您使用String s = "Hello"; Sting s2= "Hello"
时,您会获得s
和s2
的相同副本。但是,当您执行String s = new String("Hello"); String s2 = new String("Hello")
时,堆中的s
和s2
会有不同的副本。