Поиск по сайту:

Почему строка неизменяема в Java?


Почему String неизменяем в Java — один из популярных вопросов на собеседованиях. Строка является одним из наиболее часто используемых классов в любом языке программирования. Мы знаем, что String неизменяем и окончательный в Java. Среда выполнения Java поддерживает пул строк, что делает его особым классом.

Почему String неизменяем в Java?

  1. пространство в куче, поскольку разные строковые переменные могут ссылаться на одну и ту же строковую переменную в пуле. Если бы String не была неизменяемой, интернирование String было бы невозможно, потому что, если бы какая-либо переменная изменила значение, это отразилось бы и на других переменных.
  2. Если String не является неизменным, это может создать серьезную угрозу безопасности приложения. Например, имя пользователя базы данных и пароль передаются в виде строки для подключения к базе данных, а сведения о хосте и порте для программирования сокетов передаются в виде строки. Поскольку String является неизменяемым, его значение нельзя изменить, иначе любой хакер может изменить указанное значение, что вызовет проблемы с безопасностью в приложении.
  3. Поскольку String неизменяем, он безопасен для многопоточности. Один экземпляр String может использоваться в разных потоках. Это позволяет избежать использования синхронизации для обеспечения безопасности потоков. Строки неявно потокобезопасны.
  4. Строки используются в загрузчике классов Java, а неизменяемость обеспечивает уверенность в том, что правильный класс загружается загрузчиком классов. Например, подумайте о случае, когда вы пытаетесь загрузить класс java.sql.Connection, но ссылочное значение изменяется на класс myhacked.Connection, который может делать нежелательные вещи для ваша база данных.
  5. Поскольку String неизменяем, его хэш-код кэшируется во время создания, и его не нужно вычислять повторно. Это делает его отличным кандидатом на роль ключа в карте, и его обработка выполняется быстрее, чем другие ключевые объекты HashMap. Вот почему String чаще всего используется в качестве ключей HashMap.

Выше приведены некоторые из причин, которые я мог придумать, которые показывают преимущества неизменности строк. Это замечательная особенность неизменяемого класса.

Вы можете проверить больше примеров Java String в нашем репозитории GitHub.