Middle
54
questionbank

Как строки хранятся в памяти в языке Java?

Получайте ответы на вопросы в реальном времени с Sobes Copilot
Ответ от нейросети sobes.tech

В Java строка (String) является неизменяемым объектом. Ее значение представлено последовательностью символов.

До Java 9, String хранила символы в массиве char[]. Каждый символ занимал 2 байта (UTF-16).

java

С Java 9, для экономии памяти, String может использовать либо массив byte[] (для ASCII/Latin-1 символов), либо массив char[] (для UTF-16 символов). Для определения кодировки используется флаг coder.

java

Строковые литералы (допустимые символы) и строки, созданные с помощью оператора new String(...), хранятся на "куче" (heap).

Строковые литералы также помещаются в "пул строк" (String Pool), находящийся в области памяти PermGen (до Java 8) или MetaSpace (с Java 8). Если строка с таким значением уже существует в пуле, используется ссылка на существующий объект.

java

Поскольку строки неизменяемы, изменение значения строки (например, конкатенация) приводит к созданию нового объекта String в памяти.