Потоково-безпечна змінна послідовність символів. Рядковий буфер подібний до String, але його можна змінювати. У будь-який момент часу він містить певну послідовність символів, але довжину та вміст послідовності можна змінити за допомогою певних викликів методів. Буфери рядків безпечні для використання кількома потоками.
StringBuffer синхронізований, тобто його методи є потокобезпечними та можуть безпечно використовуватися в багатопоточному середовищі. З іншого боку, StringBuilder не синхронізований, що робить його швидшим, ніж StringBuffer, але він не є потокобезпечним і не повинен використовуватися в багатопоточному середовищі.
Використовується StringBuffer коли у вас є спільні стани, які змінюються одночасними потоками. StringBuffer є потоково-безпечними, що означає, що вони мають синхронізовані методи для контролю доступу, так що лише один потік може отримати доступ до синхронізованого коду об’єкта StringBuffer одночасно.
Контейнер для даних певного примітивного типу. Буфер — це лінійна скінченна послідовність елементів певного примітивного типу. Окрім вмісту, основними властивостями буфера є його ємність, обмеження та положення: ємність буфера — це кількість елементів, які він містить.
Клас String є незмінним. Клас StringBuffer є змінним. Рядок повільний і споживає більше пам’яті, коли ми об’єднуємо забагато рядків, оскільки щоразу створюється новий екземпляр. StringBuffer швидкий і споживає менше пам’яті, коли ми об’єднуємо t рядків.
Підсумовуючи, коли справа доходить до операцій конкатенації або модифікації, StringBuilder демонструє значно вищу продуктивність порівняно з класом String. Зміна рядка призводить до створення нового об’єкта в пам’яті купи, що може призвести до неефективності продуктивності.