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

OUN*_*aif 7 java string

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

在这个链接中,据说:

String s1 = "Hello";

String s2 = new String("Hello");
Run Code Online (Sandbox Code Playgroud)

s1指向String Pool的位置,s2指向堆内存位置.

ΦXo*_*a ツ 20

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

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

考虑这个例子:

String s1 = "cat";

String s2 = "cat";

String s3 = new String("cat");
Run Code Online (Sandbox Code Playgroud)

JVM足够聪明地看到,对象S2已经在内存中,因此而不是创建一个新的对象,浪费新记忆的地方,它指定参考分配相同的内存S1

在此输入图像描述

  • 加上图片 (2认同)

mc2*_*c20 6

当你用String s = "Hello"; Sting s2= "Hello"你得到两个相同的副本ss2。但是,当您这样做时,堆中和堆中String s = new String("Hello"); String s2 = new String("Hello")都有不同的副本。ss2