Метод substring стал эффективнее в последних версиях Java благодаря оптимизации использования памяти. 4
В более ранних версиях Java подстроки хранили ссылки на тот же массив символов, что и оригинальная строка, что могло приводить к неэффективному использованию памяти. 3 В Java 8 поведение изменилось, и теперь метод substring создаёт новый массив символов. 3
Также в последних версиях Java устранены поля offset и count, что позволило исключить совместное использование char-массива и удалить поля смещения и длины, благодаря чему метод substring теперь просто копирует все символы в новую строку. 5
Эти изменения направлены на минимизацию утечек памяти за счёт исключения ссылок на исходный массив символов и повышение эффективности операций за счёт ускорения работы и сокращения накладных расходов памяти. 4