В чем смысл неизменяемости в терминах String?
Термин Mutable означает «может измениться», а неизменяемые средства «не могут измениться». Неизменяемый объект означает, что состояние объекта не может измениться после его создания. Здесь String неизменен, означает, что вы не можете изменить сам объект, но вы можете изменить ссылку на объект. Изменение объекта означает использование его методов для изменения одного из его полей, или поля являются общедоступными (и не окончательными), так что вы можете обновляться извне, не получая доступ к ним с помощью методов. После создания строкового объекта его данные или состояние не могут быть изменены, но создается новый строковый объект. Здесь важно отметить, что, хотя объект String неизменен, его ссылочной переменной нет.
String str1="Hello"; System.out.println("str1 is "+a); String str2 = str1; str1 ="World!!"; System.out.println("str1 after modify "+a); System.out.println("str2 is "+b);
Выход
str1 is Hello str1 after modify World!! str2 is Hello
Здесь мы видим разницу между мутацией объекта и изменением ссылки. str2 по-прежнему указывает на тот же объект, на который мы первоначально задали str1. Установка str1 в «World !!» только изменяет ссылку, тогда как объект String, который он изначально ссылался, остается неизменным.
Преимущества
Неизменяемость струн имеет положительное значение в многопоточных приложениях, поскольку обеспечивает автоматическую защиту резьбы. Экземпляры неизменяемых типов по сути являются потокобезопасными, потому что нить не может его модифицировать. Кроме того, String широко используется в качестве параметра для многих классов Java, например. сетевое подключение, открытие файлов и т. д. Если бы это не было неизменным, соединение или файл были бы изменены и привели к серьезной угрозе безопасности.
Минус
Основным недостатком неизменяемых типов является то, что они требуют больше ресурсов, чем другие типы объектов. Поскольку каждый раз, когда он был изменен, он создает новый.
String str=null; for(int i=0;i < =100;i++){ str+="Add this"; }
Решение
Вышеупомянутый сегмент кода создает 1000 новых строковых переменных. В таких ситуациях вы должны использовать класс Java StringBuilder, который позволяет вам изменять текст без создания новых экземпляров класса String. Java StringBuilder - это Mutable-тип, который означает, что когда вы его изменяете, он все еще сохраняет одни и те же данные
Пример
public class TestClass{ public static void main(String[] args) { StringBuilder sBuilder = new StringBuilder(); for (int i = 0; i < 1000; i++) { sBuilder.append("Add This"); } String str = sBuilder.toString(); } }