所以,我意识到我要问的问题与一次又一次被殴打致死的话题有关,但是,即使在阅读了我能找到的所有答案和文档之后,我仍然有点困惑字符串实习。可能是因为我对JVM缺乏了解;也许这是由于 Java 7 中引入的更改贬低了许多上述答案和文档。无论哪种方式,我都被卡住了,我希望有人可以帮助我更清楚地理解这个概念......
String a = "text";
String b = new String("text");
在上面的示例中,我知道将创建两个 String 对象。我也明白只有一个 char 数组包含't', 'e', 'x', and 't'
内存中的序列。
但是,每个字符串对象实际存储在内存中的哪个位置?
如果我读过的内容我没看错:变量的引用对象a
将存储在常量池中,而变量的引用对象b
将存储在堆中,对吧?
如果是这种情况,我对实习生池如何维护实习生字符串感到困惑。它是否跟踪常量池中定义的字符串以及.intern()
从堆中手动实习(调用)的字符串?JVM 是否创建常量池中定义的字符串对象并将它们加载到实习池中?我很困惑这一切是如何运作的......
再一次,很抱歉提出如此令人困惑/愚蠢的问题,只是我对它的结构和内部工作方式相对较新,JVM
其中很多都让我头晕目眩。谢谢!