Итак, я понимаю, что вопросы, которые я собираюсь задать, относятся к теме, которая была избита до смерти снова и снова, однако даже после прочтения всех ответов и документации, которые я мог найти, я все еще добр путают насчет интернирования строк. Возможно, это из-за моего непонимания для JVM; возможно, из-за изменений, внесенных в Java 7, обесценивая многие из вышеупомянутых ответов и документации. В любом случае, я застрял, и я надеюсь, что кто-то может помочь мне понять концепцию немного более четко...
String a = "text";
String b = new String("text");
В приведенном выше примере я понимаю, что будут созданы два объекта String. Я также понимаю, что будет только один массив char, содержащий последовательность "t", "e", "x" и "t" в памяти. Однако, где в памяти хранятся каждый из объектов строки? Если то, что я прочитал, я прочитал правильно: референт переменной a
будет сохранен в пуле констант, тогда как референт b
будет сохранен в куче, верно? Если это так, я смущен тем, как внутренний пул поддерживает интернированные строки. Он отслеживает строки, определенные в пуле констант, и те, которые были вручную интернализованы (вызывается .intern()
) из кучи? Создает ли JVM строковые объекты, определенные в пуле констант, и загружает их в главный пул? Я смущен тем, как все это работает...
Снова, извините за то, что задаю такие запутанные/асинхронные вопросы, просто потому, что я относительно новичок в структуре и внутренней работе JVM
, и многие из них оставили мою голову крутой. Спасибо!