2015-10-20 3 views
2

Ну, у меня есть такой кодстроковый литерал бассейн

String s = "hello"; 
String s2 = s + "world"; 

Я знаю, что переменная s хранится в Java Heap в строковый литерал Pool. Также я знаю, что переменная s2 хранится в Java Heap (потому что '+' в этом примере создает новый объект). Но мой вопрос: будет ли «мир» пуст в Пул или с ним ничего не случится?

ответ

2

Да, это будет. Где бы вы ни были, когда вы объявляете строковый литерал, он, очевидно, попадает в пул, независимо от его использования.

+0

спасибо. Но можете ли вы прикрепить ссылку, где я могу это прочитать?) –

+0

@ ТимМаркусенко «Поскольку вся информация, необходимая для динамического разрешения символических ссылок на классы, поля и методы во время выполнения, кодируется строковыми константами, постоянный пул содержит фактически самую большую часть файла среднего класса, приблизительно 60%. Фактически, это делает постоянный пул легкой целью для проблем с управлением кодом. Инструкции по байтовому кодированию сами составляют всего 12% ». https://commons.apache.org/proper/commons-bcel/manual.html Не уверен, что вы хотите узнать больше о байт-коде и хранилище строк в постоянном пуле ... –

0

Поскольку String «мир» не существует в пуле, создается новый объект String, затем он помещается в пул.

Когда мы используем двойные кавычки, чтобы создать String, он сначала ищет String с таким же значением в String бассейне, если обнаружено, что просто возвращает ссылку еще он создает в бассейне новой String, а затем возвращает ссылку.

0

В принципе, 's' и 's2' являются лишь ссылками, а реальными объектами являются «Hello» и «world». Это следует за концепцией, указывающей, что строки являются неизменяемыми, а ссылки String - нет. Итак, да, поскольку «мир» - это объект String, кроме как строкового литерала, он будет храниться в куче, подобном приветствию. Также не помните, что ни 's', ни 's2' не будут перегружены как изменяемые ссылки String.

+0

Да, вы правы. 's' как переменная в PerGen, 's2' как переменная в Stack. Я имею в виду, что значения хранятся в пуле и просто в куче соответственно. –

Смежные вопросы