Что такое строка?
Строка представляет собой последовательность символов. Он определяется как строковые литералы, такие как «Hello».
Например:
Строка s1 = «Привет»;
равно
char data[] = {'H', 'e', 'l', 'l', 'o'};
Строка s1 = новая строка (данные);
Что такое неизменность строки?
Неизменяемая строка — это строковый объект, состояние которого нельзя изменить после создания. Однако ссылку на объект String можно изменить.
Например:
Строка s1 = «Привет»;
s1.concat («Средний»);
Значением s1 будет «Hello», а не «HelloMedium».
«Hello» остается неизменным, и создается новая строка с «HelloMedium», что подтверждает неизменность строки. Ссылочная переменная s1 указывает на Hello, а не на «HelloMedium».
Чтобы изменить ссылку с «Hello» на «HelloMedium», требуется явное присвоение переменной s1, например
Строка s1 = «Привет»;
s1 = s1.concat («Средний»);
Теперь пул строк будет выглядеть так, как показано на диаграмме ниже.
Как сделать строку неизменной?
В Java ключевое слово Final используется для применения неизменности к объекту String.
Почему строка неизменяема?
1. Кэширование
Объекты String кэшируются в пуле строк, что позволяет получать доступ к строковым литералам несколькими потоками в приложении. Следовательно, подход к кэшированию повышает производительность всей системы, а также экономит много места в куче.
2. Безопасность
Поскольку String неизменяем, любой нежелательный злоумышленник не может создать проблемы безопасности в программе, обновив конфиденциальную информацию, такую как пароли, токены и ключи или порты.
3. Параллелизм и синхронизация
Для многопоточности String является потокобезопасным, т. е. несколько потоков могут обращаться к одному и тому же объекту String, не беспокоясь о том, что он будет изменен в будущем. В результате он неявно применяет синхронизацию для безопасности потоков.
4. Загрузка класса
ClassLoader всегда загружает правильный класс. Например, в случае изменяемости злоумышленники могут изменить класс java.sql.Connection на hacked.Connection, чтобы сохранить конфиденциальную информацию в нежелательной базе данных.
Заключение
Из-за безопасности, синхронизации и параллелизма, кэширования и загрузки классов String неизменяем в Java. Чтобы удалить неизменяемость и предотвратить ее расширение, строка была сделана окончательной.
Подключаемся по LinkedIn.