Является ли класс String в Java иммутабельным (неизменяемым)?

«Является ли класс String в Java иммутабельным (неизменяемым)?» — вопрос из категории Java Core, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, класс String в Java иммутабелен (неизменяем). После создания объекта String его последовательность символов изменить невозможно.

Ключевые следствия:

  • Любая операция, модифицирующая строку (например, concat(), substring(), toUpperCase()), возвращает новый объект String, оставляя оригинал неизменным.
  • Поля класса объявлены как private final.

Пример:

String original = "Hello";
String modified = original.concat(" World");

System.out.println(original); // Вывод: "Hello" (оригинал не изменился)
System.out.println(modified); // Вывод: "Hello World" (новый объект)

Преимущества иммутабельности String:

  1. Потокобезопасность: Объекты можно безопасно использовать в многопоточных средах без синхронизации.
  2. Безопасность: Идеально для хранения чувствительных данных (пароли, ключи).
  3. Кэширование хэша: Хэш-код вычисляется один раз и кэшируется, что повышает производительность при использовании в HashMap.
  4. Надёжность ключей в коллекциях: Неизменяемость гарантирует, что ключ в HashMap не изменится после помещения в коллекцию.