Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Java: string, stringbuffer, stringbuilder, mutability, performance, thread safety

Какая разница между String, StringBuffer и StringBuilder?

Этот вопрос проверяет понимание различий между тремя основными типами для работы с строками в Java. Он поможет оценить знание особенностей каждого из этих классов в контексте производительности и потокобезопасности.

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

  • String — неизменяемый класс, каждый раз при изменении строки создается новый объект.

  • StringBuffer — изменяемый класс, потокобезопасен, но менее эффективен, чем StringBuilder.

  • StringBuilder — изменяемый класс, не является потокобезопасным, но более эффективен в однопоточных приложениях.

Длинный ответ

String (неизменяемая строка)

Класс String в Java — это неизменяемый объект. Когда мы изменяем строку, например, добавляем или изменяем символы, создается новый объект строки. Это приводит к дополнительным накладным расходам на создание новых объектов в памяти, что может быть неэффективным при частых изменениях строк.

Пример:

String s = "hello";
s = s + " world"; // создается новый объект строки

StringBuffer (изменяемая строка, потокобезопасная)

Класс StringBuffer предоставляет возможность изменять строки без создания новых объектов. Это повышает производительность при частых изменениях. Однако, StringBuffer является потокобезопасным, что делает его немного более медленным по сравнению с StringBuilder.

Пример:

StringBuffer sb = new StringBuffer("hello");
sb.append(" world"); // изменяется сам объект, не создается новый

Потокобезопасность означает, что несколько потоков могут безопасно работать с объектом StringBuffer одновременно, но за счет дополнительного синхронизирования.

StringBuilder (изменяемая строка, не потокобезопасная)

StringBuilder похож на StringBuffer, но не является потокобезопасным. Это делает его более быстрым, чем StringBuffer, и более подходящим для использования в однопоточных приложениях.

Пример:

StringBuilder sb = new StringBuilder("hello");
sb.append(" world"); // изменяется тот же объект, производительность выше

 Когда использовать

  • String: если строка не будет изменяться (например, строковые литералы).

  • StringBuffer: если строки изменяются часто и приложение многозадачное.

  • StringBuilder: если строки изменяются часто, но приложение не многозадачное.

Использование String, StringBuffer или StringBuilder зависит от того, будет ли строка изменяться и требуется ли потокобезопасность. Для большинства задач, где не требуется потокобезопасность, предпочтительнее использовать StringBuilder из-за его лучшей производительности.

  • Аватар

    Android Guru

    Anton Gulyaev

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    3

  • Сложность:

    6

Навыки

  • Java

    Java

Ключевые слова

#string

#stringbuffer

#stringbuilder

#mutability

#performance

#thread safety

Подпишись на Java Developer в телеграм

  • Аватар

    Android Guru

    Anton Gulyaev

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.