Каква е основната разлика между StringBuffer
и StringBuilder
?
Има ли някакви проблеми с производителността при избора на някой от тях?
По принцип методите на StringBuffer
са синхронизирани, докато тези на StringBuilder
не са.
Операциите са "почти" еднакви, но използването на синхронизирани методи в една нишка е излишно.
Това е почти всичко.
Цитат от StringBuilder API:
Този клас [StringBuilder] предоставя API, съвместим със StringBuffer, но без гаранция за синхронизация. Този клас е предназначен за използване като заместител на StringBuffer на места, където стринг буферът се използва от една единствена нишка (какъвто обикновено е случаят). Където е възможно, се препоръчва този клас да се използва за предпочитане пред StringBuffer, тъй като той ще бъде по-бърз при повечето имплементации.
Затова беше направена замяна с него.
Същото се случи и с Vector
и ArrayList
.
StringBuilder е въведен в Java 1.5, така че няма да работи с по-ранни JVM.
От Javadocs:
Класът StringBuilder предоставя API, съвместим със StringBuffer, но без гаранция за синхронизация. Този клас е проектиран за използване като капка в замяна на StringBuffer на места, където стринг буферът се използва от една нишка (какъвто обикновено е случаят). Където е възможно, се препоръчва този клас да се използва за предпочитане пред StringBuffer, тъй като той ще бъде по-бърз при повечето имплементации.