# StringBuffer

Как мы уже рассмотрели, строка String является некой константой, и каждый раз вы просто заново создаете некую новую константу и кладете ее в свою переменную, таким образом следует понимать, что любое изменение в строках связано с использованием памяти под новую строку.

```
String s = "a";
for(int i = 0; i < 100; i++)
{
       s+='a';
}
```

Сей прекрасный код создаст 100 строк, которые будут хранится в памяти, пока сборщик мусора не удалит их. Поэтому, если вы напишите такой код в реальном проекте, то вам оторвут руки. Чтобы редактировать строки следует использовать класс обертку StringBuffer.

```
StringBuffer s = new StringBuffer("a");
for(int i = 0; i < 100;i++)   {
      s.append('a');
}
```

Конструктор StringBuffer может принимать на вход строку, с которой можно проводить дальнейшие манипуляции. Кроме методов, которые позволяют добавить в конец строки различные типы данных (append), он также умеет удалять и вставлять символы в строки:

```
s.deleteCharAt(i);//удаляет символ в позиции i
s.delete(i, j);//удаляет подстроку с i - го по j - ый символ
s.insert(i,j);//вставляет на i - ое место объект j
```

Для того, чтобы вернутся от StringBuffer к String необходимо вызвать метод toString();

```
StringBuffer s = new StringBuffer("abcd");
 s.append('e');//abcde
 s.delete(1,2);//acde
 s.insert(1,'b');//abcde
 s.deleteCharAt(2);//abde
 String ans = s.toString();
```

Вопрос 1

```
На чём сказывается излишнее выделение памяти под переменные?
```
