Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
28.01.2022, 22:37
|
|||
---|---|---|---|
Java String Pool - Вопрос по хранению строк в памяти |
|||
#18+
Добрый вечер. У меня есть вопрос по пулу джавовых строк. Есть следующий код: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
Насколько я понимаю, общее правило заключается в том, что литералы (например, «ABC») отправляются в String Pool, объекты (например, new String()) отправляются в Java Heap. Таким образом, первый println - "false" 2 - "false" 3 - "true" 4 - "false", потому что объект плюс литерал идет в Java Heap (насколько я это понимаю) 5 - "true" У меня вопрос по поводу пятого println. Если бы я удалил слово final, я бы получил результат false. Почему? Как ведут себя строки в пятом println? Что именно делает слово final? Насколько я знаю, final переменные помещаются в какую-то специальную область памяти. Например, глобальный кеш или типа того. Я точно не уверен. Объясните мне пожалуйста, что происходит в пятом println с final и без final? Я буду благодарен за ссылки на документацию, потому что я ничего не смог найти. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
29.01.2022, 00:46
|
|||
---|---|---|---|
|
|||
Java String Pool - Вопрос по хранению строк в памяти |
|||
#18+
Это оптимизация компилятора называется constant folding. Константа плюс константа заменяется константой еще на этапе компиляции. В итоговом байт коде вместо s5 + "C" будет сразу "ABC", т.е. в рантайме никакие объекты не создаются. Можешь погуглить java constant folding - вряд ли там будет что-то прямо сказано ... |
|||
:
Нравится:
Не нравится:
|
|||
|
|
start [/forum/topic.php?fid=59&mobile=1&tid=2120259]: |
0ms |
get settings: |
7ms |
get forum list: |
6ms |
check forum access: |
1ms |
check topic access: |
1ms |
track hit: |
35ms |
get topic data: |
7ms |
get forum data: |
1ms |
get page messages: |
64ms |
get tp. blocked users: |
1ms |
others: | 7ms |
total: | 130ms |
0 / 0 |