Объясните различия между String, StringBuilder и StringBuffer в Java.

В Java (хотя вопрос в модуле C#, но эти классы относятся к Java) есть три основных типа для работы со строками:

Короткий ответ

Что ответить на собеседовании

В Java (хотя вопрос в модуле C#, но эти классы относятся к Java) есть три основных типа для работы со строками:

Подробный разбор

Ответ с пояснениями

В 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 — для неизменяемых строк.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее