JavaRush /Java блог /Random /Класс StringBuilder в Java 8 на практическом примере
Нина Можарская
17 уровень
Киев

Класс StringBuilder в Java 8 на практическом примере

Статья из группы Random
Класс String создает неизменяемые строки. Это означает, что если применить любую операцию к строке или операции к строке, то в результате будет построена новая строка. Если эту новую строку не присвоить никакой переменной, то результат операции будет утерян. Соответственно операции над такими строками обязательно приводят к созданию новой строки. А это дополнительные расходы памяти и времени процессора. Если операций над строкой достаточно много, то часто бывает эффективней воспользоваться динамическими строками, которые реализуются классом StringBuilder.
Класс StringBuilder в Java 8 на практическом примере - 1
Рассмотрим код ниже:

String s = "Some text";
int count = 100;
for(int i = 0; i<100;i++){
   s+=i;
}
**********************
StringBuilder s = new StringBuilder(110);
int count = 100;
s.append("Some text");
for(int i = 0;i<count;i++){
s.append(i);
}
В приведенном коде рассматривается одна и та же задача. Когда мы к заданной строке добавляем 100 новых подстрок. В первом примере для этой цели используется класс String, что не очень эффективно, поскольку каждое добавление подстроки ведет к построению нового объекта String. А это дополнительный расход памяти и времени. Во втором примере эта задача решается с помощью класса StringBuilder. Мы заранее создаем объект класса StringBuilder, а затем с помощью метода append формируем нужную нам строку изменяя содержимое созданного объекта StringBuilder, но без пересоздания самого объекта.
Комментарии (11)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Anonymous #1019275 Уровень 15
10 марта 2020
вы бы показали разницу по времени и памяти для большей наглядности.
Mihail Tymoshenko Уровень 0
14 октября 2018
Обычная на первый взгляд операция создания строки в цикле может обернуться огромными затратами памяти - по-этому в цикле только StringBuilder!
Мария Уровень 2
13 октября 2018
Обязательно опробую StringBuilder у себя в коде! Постоянное создание новых строк, увы, расходует память, так что StringBuilder должен отлично помочь с проблемой ненужных растрат такого важного ресурса
Alesha Уровень 22
13 октября 2018
А что это за 110 "new StringBuilder(110);"?
Nikita Koliadin Уровень 40
5 октября 2018
Если джава < 8 тогда все верно. В 8+ класс String был updated. Read it proof RUSSIA proof proof proof Много пруфов не бывает.