Строки в Java реализованы в виде объектов класса String. Они финализированы и неизменяемы, вследствие этого при любых манипуляциях с ними всегда создается новая строка, что делает работу со строками весьма ресурсоёмким процессом. Если строки необходимо часто менять, то для этого есть StringBuffer и StringBuilder.
Естественным образом возникают вопросы:
- В чем разница между StringBuffer и StringBuilder?
- Что между ними общего?
- Когда лучше использовать StringBuffer , а когда StringBuilder?
Как уже было сказано, строки в Java неизменны и финализированы. В случае необходимости, манипуляции со строками в Java обеспечиваются двумя классами – StringBuffer и StringBuilder.
StringBuffer и StringBuilder реализуют изменяемые строки, а отличия между ними заключается в потокобезопасности и производительности.
Операции со StringBuffer, в отличие от StringBuilder, потокобезопасны и синхронизированы. Поэтому в случаях, когда несколько потоков должны работать с одной строкой, то необходимо использовать StringBuffer. Однако в однопоточных окружениях желательно использовать StringBuilder, поскольку преимущество StringBuilder перед StringBuffer заключается в производительности из-за отсутствия затрат для поддержки синхронизации.
Итак, подытожим:
- String – неизменяемая строка.
- StringBuffer — потокобезопасная изменяемая строка.
- StringBuilder – изменяемая строка с высокой производительностью, но без синхронизации.