Чем String, StringBuilder и StringBuffer отличаются?
String неизменяем: каждая «правка» — новый объект. StringBuilder — изменяемый буфер, быстрый, не потокобезопасный. StringBuffer — то же, но с synchronized на каждом методе — устаревший вариант.
- Конкатенация в цикле — StringBuilder, иначе квадратичная работа
- Одно выражение a + b + c компилятор оптимизирует сам
- StringBuffer почти не нужен: буфер редко делят между потоками
А ещё Известный размер — new StringBuilder(capacity)
Подробно
String s = "";
for (int i = 0; i < n; i++) s += i; // n новых строк, O(n²)
StringBuilder sb = new StringBuilder();
for (int i = 0; i < n; i++) sb.append(i); // один растущий буфер
String result = sb.toString();
StringBuilder хранит массив и растёт удвоением, как ArrayList. Методы возвращают this — цепочки append(a).append(b). Есть insert, reverse, deleteCharAt.
StringBuffer появился в Java 1.0, StringBuilder — в Java 5 как его несинхронизированная замена. Синхронизация на каждом append почти никогда не нужна: строку собирают в одном потоке.
Компилятор превращает "a" + x + "b" в эффективную конкатенацию (Java 9+: StringConcatFactory), поэтому вне циклов + нормален и читается лучше. Для соединения коллекции — String.join или Collectors.joining.
Что хотят услышать
- Изменяемость и потокобезопасность каждого.
- Почему конкатенация в цикле плоха.
Частые ошибки
- Собирать большие строки в цикле через +=.
- Думать, что StringBuilder потокобезопасен.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✗StringBuilder неизменяем, а String изменяем
- ✓String неизменяем; StringBuilder изменяем; StringBuffer — то же, но синхронизирован
- ✗String изменяем через concat; StringBuffer быстрее StringBuilder в одном потоке
- ✗Все три неизменяемы
Что спросят дальше
- Что такое string pool?
- Как работает intern()?
Разбор темы
- Строки: неизменяемость, пул и StringBuilder
Почему String immutable, String pool и intern, конкатенация и StringBuilder, char/code points и compact strings.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.