— Залишилося розібратися з StringBuilder і вважай, що ми закінчили.

Як ти вже знаєш, StringBuilder – це аналог класу String, який тільки змінюється.

— А ще я пам'ятаю, що компілятор сам генерує код із використанням StringBuilder, коли ми просто складаємо рядки.

— Так ти правий. Яка в тебе чудова пам'ять. Втім, як і всі роботи. Весь час забуваю про це.

Давай розберемося, що можна робити за допомогою класу StringBuilder:

1) У мене є звичайний рядок, я хочу зробити його змінним. Як мені це зробити?

String s = "Bender";
StringBuilder s2 = новий StringBuilder(s);

2) Я хочу додати символ до поточного «змінного рядка»?

String s = "Bender";
StringBuilder s2 = новий StringBuilder(s);
s2.append("!");

3) А як перетворити StringBuilder назад у рядок?

String s = "Bender";
StringBuilder s2 = новий StringBuilder(s);
s2.append("!");
s = s2.toString();

4) А якщо мені потрібно видалити символ?

String s = "Bender";
StringBuilder s2 = новий StringBuilder(s);
s2.deleteCharAt(2); //залишиться "Beder"

5) Я хочу замінити частину рядка на інший?

String s = "Bender";
StringBuilder s2 = новий StringBuilder(s);
s2.replace (3, 5, "_DE_"); //буде "Ben_DE_r"

6) Мені потрібно розгорнути рядок задом наперед?

String s = "Bender";
StringBuilder s2 = новий StringBuilder(s);
s2.reverse(); //буде "redneB";

— Круто. Дякую, Еллі, все зрозуміло.

— Рада, що тобі сподобалося.

Ще хотіла б нагадати, начебто про це мав би сказати Білаабо.

Є ще один клас – StringBuffer – це аналог класу StringBuilder, тільки його методи оголошені як synchronized. Отже, перед кожним викликом такого методу Java-машина перевіряє, чи зайнятий об'єкт, і якщо немає — позначає його як зайнятий. Після виходу з методу - "звільняє" об'єкт. Через це такі виклики працюють повільніше. Не варто користуватися StringBuffer без необхідності.

Але якщо тобі потрібен змінний об'єкт String, до якого будуть звертатися з кількох ниток – краще StringBuffer тобі не знайти.

— Спасибі за інформацію. Думаю, колись вона мені знадобиться.