Ответ
Да, String в Java — строго неизменяемый (immutable) класс. После создания объекта String его последовательность символов изменить невозможно.
Доказательство на примере:
String original = "Hello";
String modified = original.concat(" World"); // Создается НОВЫЙ объект
System.out.println(original); // "Hello" - исходный объект не изменился
System.out.println(modified); // "Hello World"
// Даже "изменяющие" методы возвращают новый объект
String upper = original.toUpperCase(); // Новый объект "HELLO"
Причины и преимущества неизменяемости String:
- Безопасность в многопоточности: Объекты
Stringможно свободно передавать между потоками без синхронизации. - Кэширование в String Pool: JVM хранит литералы и интернированные строки в пуле, что экономит память.
- Безопасность: Критические данные (например, пароли в
char[]) не могут быть изменены через побочные ссылки. - Корректность хеширования: Хеш-код строки, вычисленный один раз (т.к. поля неизменны), можно кэшировать и безопасно использовать в
HashMap/HashSet.
Для изменяемых строк используйте StringBuilder или StringBuffer.