Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Задачи

Войти

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

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

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад

Какая разница между 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

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

#string

#stringbuffer

#stringbuilder

#mutability

#performance

#thread safety

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

  • Аватар

    Android Guru

    Anton Gulyaev

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