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
当你用String s = "Hello"; Sting s2= "Hello"
你得到两个相同的副本s
和s2
。但是,当您这样做时,堆中和堆中String s = new String("Hello"); String s2 = new String("Hello")
都有不同的副本。s
s2
归档时间: |
|
查看次数: |
8271 次 |
最近记录: |