Автор оригинала: Pankaj Kumar.
Почему строка неизменна в Java-один из популярных вопросов для интервью. Строка является одним из наиболее часто используемых классов в любом языке программирования. Мы знаем, что строка является неизменяемой и окончательной в Java. Среда выполнения Java поддерживает пул строк, который делает ее особым классом.
Почему строка неизменна в Java?
Давайте рассмотрим некоторые преимущества неизменяемости строк, которые помогут понять, почему строка неизменна в Java.
- Пул строк возможен только потому, что строка неизменна в Java. Таким образом, среда выполнения Java экономит много места в куче , поскольку разные строковые переменные могут ссылаться на одну и ту же строковую переменную в пуле. Если бы строка не была неизменяемой, то интернирование строк было бы невозможно, потому что, если бы какая-либо переменная изменила значение, это отразилось бы и в других переменных. Если строка не является неизменяемой, это может привести к серьезной угрозе безопасности приложения. Например, имя пользователя базы данных, пароль передаются в виде строки для подключения к базе данных, а в
- программирование сокетов сведения о хосте и порту передаются в виде строки. Поскольку строка неизменна, ее значение нельзя изменить, иначе любой хакер может изменить указанное значение, чтобы вызвать проблемы с безопасностью в приложении. Поскольку строка неизменна, она безопасна для
- многопоточности . Один экземпляр строки может быть общим для разных потоков. Это позволяет избежать использования синхронизации для обеспечения потокобезопасности. Строки неявно потокобезопасны. Строки используются в
- загрузчике классов java , и неизменяемость обеспечивает безопасность того, что загрузчик классов загружает правильный класс. Например, подумайте об экземпляре, в котором вы пытаетесь загрузить java.sql.Connection
класс, но указанное значение изменено на
myhacked.Подключениекласс, который может делать нежелательные вещи с вашей базой данных.
Поскольку строка неизменна, ее - хэш-код кэшируется во время создания, и ее не нужно вычислять повторно. Это делает его отличным кандидатом на ключ в карте, и его обработка выполняется быстрее, чем у других ключевых объектов HashMap. Вот почему строка наиболее широко используется в качестве ключей хэш-карты.
Выше приведены некоторые из причин, о которых я мог подумать, которые показывают преимущества неизменяемости строк. Это отличная функция класса Java String, которая делает его особенным.
Прочтите этот пост, чтобы узнать, как написать свой собственный неизменяемый класс .