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