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