Вопрос проверяет понимание концепции неизменяемости объектов в Java и причин, по которым класс String спроектирован как immutable.
Класс String в Java спроектирован как неизменяемый (immutable) по нескольким ключевым причинам, связанным с производительностью, безопасностью и архитектурой языка. Неизменяемость означает, что после создания объекта String его значение нельзя изменить. Любая операция, которая кажется изменяющей строку (например, конкатенация), на самом деле создает новый объект.
public class StringImmutability {
public static void main(String[] args) {
String s1 = "Hello";
String s2 = s1;
// Попытка "изменить" строку
s1 = s1 + " World";
System.out.println(s1); // Hello World
System.out.println(s2); // Hello (s2 не изменилась!)
// Доказательство: разные объекты
System.out.println(s1 == s2); // false
}
}В примере видно, что при конкатенации создается новый объект, а исходная строка остается неизменной. Переменная s2 продолжает ссылаться на старый объект.
Неизменяемость String — это продуманное архитектурное решение, которое обеспечивает безопасность, производительность и надежность в многопоточных средах. Применять эту концепцию стоит всегда, когда требуется гарантировать, что данные не будут изменены после создания объекта, особенно в системах с высокой нагрузкой и требованиями к безопасности.