ovšem ke skrytému vytvoření nového objektu dojít ve skutečnosti může a skutečně i několikrát dojde – přijdete na to, kde a proč?
Asi tady
str.append(i);
str.append(' ');
a tady
return str.toString();
V prvním případě kvůli občasné realokaci velikostí již nedostačujícího StringBufferu str
(alokace nového bufferu, kopie z původního místa, úprava referencí, uvolnění původního objektu), v druhém jednorázová konverze StringBuffer -> String.