- Итерация символов строки через String.charAt() выполняется медленно, см. например Вудстокс (мне удалось проверить это утверждение с помощью собственных тестов):
- Копирование в буферный массив с помощью String.getChars() и затем итерация буфера, очевидно, обходится дороже, чем просто итерация по массиву.
- Библиотеки с высокой оптимизацией производительности, такие как FastJSON, используют смесь небезопасных, устаревших и недокументированных API-интерфейсов (AFAIU) для прямого доступа к резервному массиву String (я проверил с помощью собственных тестов, что этот подход имеет преимущества в производительности)
Обновление от 23 ноября 2025 г.:
- Отредактирован вопрос, чтобы сделать его более кратким, удалены некоторые предположения, почему все работает так, как работает
[*]Это не лучшее место для вопросов, архитекторы языка Java активны на https://langdev.stackexchange.com/
[*]Несколько комментаторов упомянули, что обещание неизменяемости String мешает прямому доступу к резервному массиву. Интересной идеей в этом аспекте могут быть замороженные массивы. Хотя на первый взгляд JEP выглядит устаревшим и мертвым, Брайан Гетц упомянул Frozen Arrays как желательную функцию еще в этом году (2025).
Внутренне JDK использует построение прямого доступа/нулевого копирования через механизм SharedSecrets (JavaLangAccess.getBytesNoRepl()/newStringNoRepl()или>
Подробнее здесь: https://stackoverflow.com/questions/798 ... ang-string
Мобильная версия