Klasika - jak spojovat více řetězců

Začátečníka láká použít pro spojování řetězců operátor +, a to i v případě, že se za existující řetězec připojují další znaky či řetězce nebo se zřetězení dokonce opakuje v cyklu.

Co však zřetězení s = s + " novy"; udělá?

  1. s jako odkaz na objekt s původním řetězcem, " novy" jako literál / hotový řetězec v paměti.

  2. Vytvoří nový řetězec jako prázdný StringBuilder,

  3. ty původní (s a " novy") do něj přikopíruje.

  4. Převede StringBuilder na String.

  5. Původní objekt s se "zapomene".

A toto provádět v cyklu? To je trochu moc operací, ne!?

První příklad na Java Anti-patterns také ukazuje tuto extrémně neefektivní konstrukci.

Něco jako s += " novy" sice vypadá hezky, ale v tomto ohledu vůbec nepomůže. Jediným rozumným řešením je v cyklu použití StringBuilderu (příp. StringBufferu):

StringBuilder sb = new StringBuilder(persons.size() * 16); // well estimated buffer
for (Person p : persons) {
    sb.append(p.getName);
}