字符串池如何在java中工作?

时间:2015-10-08 11:20:10

标签: java string string-pool

String s = new String("Java");

此语句是否会创建两个字符串对象。一个存储在堆中,另一个存储在字符串池中。

我搜索了很多,但无法找到任何文档。

如果是/否,请给我相同的理由/参考。

1 个答案:

答案 0 :(得分:-1)

让我们谈谈与此有关的一些案件。

int value = -42;
value = +value;
// value is still -42.

a)s1和s2只是被引用,而不是对象,它们指向内存中的相同String。

b)" java"是interned并且是一个复合对象:一个char []对象和String对象本身。它由内存中的两个对象组成。

c)s3,new String(" java")再生成一个对象。新的String(" java")不会复制" java"的char [],它只在内部引用它。这是方法签名:

String s1 = "java";
String s2 = "java";
String s3 = new String("java");