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

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

Сегодня мы поговорим о строках (Strings) в Java и разберем один очень важный вопрос, которой очень часто задают на собеседованиях, а именно: Почему строки в Java неизменны и финализированы?

Строка является одним из наиболее часто используемых классов в любом языке программирования. Как мы знаем, строка в Java является неизменной и финализированной, а Java Runtime поддерживает общий пулл строк, что делает его этот класс особенным.

Преимущества неизменности строк в Java

  1. Само существование пула строк возможно только потому, что строка в Java является неизменной. Поэтому Java Runtime экономит много места в общей кучи (java heap space). Дело в том, что различные переменные могут обращаться к одной и той же String-переменной в пуле. Если строка не была бы неизменной, то и интернирование такой строки не было бы возможно. Все потому, что любая переменная могла бы изменять значение этой строки и это сразу бы отражалось и в других переменных.
  2. Если строка не является неизменной, то это вызывает серьезную угрозу безопасности вашей программы. Например, для соединения с базой данных имя пользователя базы и пароль передаются в виде строк. Тоже самое и в программировании сокетов, где хост и порт передаются в виде обычных String. Именно поэтому значение строки не может быть изменено. В противном случае любой хакер или вредоносная программа может изменить значение строк и вызвать проблемы безопасности в вашей программе.
  3. Строки неизменны, а это значит, что они потокобезопасны. Это избавляет нас от использования синхронизаций во время работы в мультипоточной среде.
  4. Строки также используются в загрузчике классов Java и неизменность строк обеспечивает безопасность выполнения загрузки класса. Например, вы пытаетесь загрузить класс java.sql.Connection, но значение ссылки было изменено вредоносной программой. Это может привести к непредвиденным результатам и данным в вашей БД.
  5. Строки неизменны, а значит их хеш-коды кешируются во время создания и не нуждаются в еще одном вычислении. Это делает строки отличным кандидатом на использование в Map в качестве ключа (key) и будет работать быстрее объектов HashMap.

Вот и все аргументы в пользу неизменности строк в Java. Следите за обновлениями на Javadevblog.com

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *