Гость
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / Java String Pool - Вопрос по хранению строк в памяти / 2 сообщений из 2, страница 1 из 1
28.01.2022, 22:37
    #40130455
IMNO
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java String Pool - Вопрос по хранению строк в памяти
Добрый вечер.

У меня есть вопрос по пулу джавовых строк.
Есть следующий код:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
public static void main(String[] args) {
        Строка s1 = новая строка ("ABC");
        Строка s2 = новая строка ("ABC");
        Строка s3 = "Азбука";
        Строка s4 = "Азбука";
        окончательная строка s5 = "AB";
        Строка s6 = "С";

        System.out.println(s1 == s2);
        System.out.println(s2 == s3);
        System.out.println(s3 == s4);
        System.out.println(s4 == s5 + s6);
        System.out.println(s4 == s5 + "C");
}



Насколько я понимаю, общее правило заключается в том, что литералы (например, «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?
Я буду благодарен за ссылки на документацию, потому что я ничего не смог найти.
...
Рейтинг: 0 / 0
29.01.2022, 00:46
    #40130464
SpringMan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java String Pool - Вопрос по хранению строк в памяти
Это оптимизация компилятора называется constant folding. Константа плюс константа заменяется константой еще на этапе компиляции. В итоговом байт коде вместо s5 + "C" будет сразу "ABC", т.е. в рантайме никакие объекты не создаются. Можешь погуглить java constant folding - вряд ли там будет что-то прямо сказано
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Java String Pool - Вопрос по хранению строк в памяти / 2 сообщений из 2, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]