Sobes.tech
Back to questions
Junior — Middle
71

Объясните различия между 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 — для неизменяемых строк.