Строки Java являются неизменяемыми.Каждый раз, когда вы делаете:
s + = c;
Вы действительно говорите:
s = новая строка (s + c);
новая строка (s + c) должна выделять строку длиной s + 1 или:
1 2 3 4 5 6 7 8 9 ... и т. Д.
Поскольку Sum (1..N) == (n + 1) (n / 2), это O (n ^ 2).
Один из случаев, когда StringBuilder - это определенное преимущество.