В чем разница между String, StringBuffer и StringBuilder?

Строки в Java реализованы в виде объектов класса String. Они финализированы и неизменяемы, вследствие этого при любых манипуляциях с ними всегда создается новая строка, что делает работу со строками весьма ресурсоёмким процессом. Если строки необходимо часто менять, то для этого есть StringBuffer и StringBuilder.

Естественным образом возникают вопросы:

  • В чем разница между StringBuffer и StringBuilder?
  • Что между ними общего?
  • Когда лучше использовать StringBuffer , а когда StringBuilder?

Как уже было сказано, строки в Java неизменны и финализированы. В случае необходимости, манипуляции со строками  в Java обеспечиваются двумя классами – StringBuffer и StringBuilder.

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

Операции со StringBuffer, в отличие от StringBuilder, потокобезопасны и синхронизированы. Поэтому в случаях, когда несколько потоков должны работать с одной строкой, то необходимо использовать StringBuffer. Однако в однопоточных окружениях желательно использовать StringBuilder, поскольку преимущество StringBuilder перед StringBuffer заключается в производительности из-за отсутствия затрат для поддержки синхронизации.

Итак, подытожим:

  • String – неизменяемая строка.
  • StringBuffer — потокобезопасная изменяемая строка.
  • StringBuilder – изменяемая строка с высокой производительностью, но без синхронизации.

 

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *