Объясните различия между String, StringBuilder и StringBuffer в Java.
Answer from AI
sobes.tech AI
В Java (хотя вопрос в модуле C#, но эти классы относятся к Java) есть три основных типа для работы со строками:
-
String — неизменяемый (immutable) объект. При изменении строки создаётся новый объект. Это безопасно для многопоточного использования, но при частых изменениях строк может быть неэффективно.
-
StringBuilder — изменяемый класс для работы со строками. Позволяет эффективно изменять содержимое без создания новых объектов. Не потокобезопасен, но быстрее в однопоточных сценариях.
-
StringBuffer — похож на StringBuilder, но потокобезопасен (синхронизирован). Используется, когда требуется безопасность при работе с несколькими потоками, но из-за синхронизации медленнее StringBuilder.
Пример:
String s = "Hello";
s += " World"; // создаётся новый объект String
StringBuilder sb = new StringBuilder("Hello");
sb.append(" World"); // изменяет существующий объект
StringBuffer sbuf = new StringBuffer("Hello");
sbuf.append(" World"); // тоже изменяет объект, но синхронизировано
Вывод: для частых изменений строк в однопоточных приложениях лучше использовать StringBuilder, для многопоточных — StringBuffer, а String — для неизменяемых строк.