Что такое строка?

Строка представляет собой последовательность символов. Он определяется как строковые литералы, такие как «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.