Ответ
Да, класс 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:
- Потокобезопасность: Объекты можно безопасно использовать в многопоточных средах без синхронизации.
- Безопасность: Идеально для хранения чувствительных данных (пароли, ключи).
- Кэширование хэша: Хэш-код вычисляется один раз и кэшируется, что повышает производительность при использовании в
HashMap. - Надёжность ключей в коллекциях: Неизменяемость гарантирует, что ключ в
HashMapне изменится после помещения в коллекцию.