Вопрос проверяет знание альтернатив неизменяемому классу String для эффективной работы с изменяемыми строками в Java.
В Java класс String является неизменяемым (immutable), что означает, что каждое изменение строки создает новый объект. Это может быть неэффективно при частых модификациях, особенно в циклах. Для решения этой проблемы существуют классы StringBuilder и StringBuffer, которые представляют изменяемые последовательности символов.
StringBuilder появился в Java 5 и является несинхронизированным, что делает его быстрее в однопоточных средах. Он предоставляет методы для добавления, вставки, удаления и замены символов.
StringBuilder sb = new StringBuilder("Hello");
sb.append(" World"); // "Hello World"
sb.insert(5, ","); // "Hello, World"
sb.replace(7, 12, "Java"); // "Hello, Java"
String result = sb.toString();StringBuffer является синхронизированным, что делает его потокобезопасным. Он появился в Java 1.0 и имеет схожий API с StringBuilder, но с дополнительными накладными расходами на синхронизацию.
StringBuffer sb = new StringBuffer("Hello");
sb.append(" World");
String result = sb.toString();Вывод: StringBuilder и StringBuffer являются эффективными альтернативами String для работы с изменяемыми строками. Выбор между ними зависит от требований к потокобезопасности. В большинстве современных приложений предпочтение отдается StringBuilder из-за его скорости.