Из чего состоит String?
Ответ на этот вопрос зависит от версии Java.
Во всех версиях есть два обязательных поля: массив char[] value, в котором хранятся символы строки и переменная int hash, в которой храниться хэш-сумма.
В версиях Java младше 7 были поля offset и count. Они использовались для повторного использования массивов из билдеров и строк, без необходимости их пересоздания. В более новых версиях эти поля убрали, для экономии памяти.
В ранних версиях Java, для хранения строк применялась кодировка UTF-16, в которой для каждого символа выделялось 2 байта. Однако большинство строк состоит из ASCII-символов, для которых требуется всего один байт. Они составляют кодировку LATIN-1. В этом случае старший байт не используется, и на его место записываются нули. В результате примерно половина памяти, выделяемая под строки, не используется, но четвертую часть памяти, выделяемой под программу, занимают строки.
В Java 6 появилась опция Compressed String (упакованная строка). Она позволяла хранить строки в кодировке LATIN-1 и использовала для этого массив byte. Однако, при использовании данной опции, были выявлены проблемы и эту фичу убрали.
Похожая фича появилась в Java 9 под именем Compact Strings. Для её реализации в классе String были добавлены поля coder и флаг COMPACT_STRINGS. Поле coder предназначено для переключения кодировок, а флаг COMPACT_STRINGS включает и выключает данную опцию.
Учитесь в сообществе
AI Sprints — обучение профессиям с ИИ
Peer review и код от других студентов. Код-ревью от менторов. Учитесь не в одиночку, а в команде
- Peer review: проверяйте код других и получайте фидбек на свой — учитесь видеть ошибки
- Сообщество: чаты, обсуждения, помощь друг другу — не застрянете в одиночку
- Менторы: код-ревью от практикующих разработчиков на сложные задачи
AI Challenge — собери чат-бота за 5 дней
Бесплатный марафон по AI-инжинирингу. Cursor + OpenAI, 60 минут в день — без опыта в программировании. К пятнице у вас будет рабочий чат-бот с памятью в браузере.
- Практика с первого дня, без теории «в стол»
- Готовый проект в портфолио к концу недели
- Старт в любой день — учитесь в своём темпе