|
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? Я буду благодарен за ссылки на документацию, потому что я ничего не смог найти. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.01.2022, 22:37 |
|
Java String Pool - Вопрос по хранению строк в памяти
|
|||
---|---|---|---|
#18+
Это оптимизация компилятора называется constant folding. Константа плюс константа заменяется константой еще на этапе компиляции. В итоговом байт коде вместо s5 + "C" будет сразу "ABC", т.е. в рантайме никакие объекты не создаются. Можешь погуглить java constant folding - вряд ли там будет что-то прямо сказано ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2022, 00:46 |
|
|
start [/forum/topic.php?fid=59&gotonew=1&tid=2120259]: |
0ms |
get settings: |
25ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
61ms |
get topic data: |
20ms |
get first new msg: |
9ms |
get forum data: |
3ms |
get page messages: |
127ms |
get tp. blocked users: |
2ms |
others: | 15ms |
total: | 284ms |
0 / 0 |