Il comportamento degli oggetti della classe StringBuilder è diverso da quello degli oggetti String per quanto riguarda la loro modifica. Gli oggetti String sono immutabili, per cui ogni volta che si esegue un’operazione di modifica su di essi, viene creato un nuovo oggetto con il nuovo valore, mentre quello originale rimane inalterato. Sugli oggetti StringBuilder invece le modifiche sono sempre effettuate sull’oggetto originale e, se il valore di ritorno dell’esecuzione del metodo viene assegnato ad un’altra reference, essa punter‡ allo stesso oggetto con lo stesso valore.
public class StringBuilderTest { public static void main(final String[] args) { String s = "Stringa di esempio"; s.substring(0,8); // se non riassegno il valore di ritorno perdo il risultato del substring System.out.println(s); // il valore originale di s non viene modificato String s2 = s.substring(0,8); // in questo caso riassegno il risultato System.out.println(s); // il valore originale di s non viene modificato System.out.println(s2); // s2 è un nuovo oggetto ed ha il nuovo valore StringBuilder sb1 = new StringBuilder("aaa"); sb1.append(" bbb"); // Anche senza l'assegnazione del valore di ritorno System.out.println("1) " + sb1); // sull'oggetto StringBuilder le modifiche vengono effettivamente fatte sb1.insert(3, "xxx"); System.out.println("2) " + sb1); sb1.reverse(); System.out.println("3) " + sb1); StringBuilder sb2 = sb1.append(" yyyy"); // In questo caso riassegno il valore ritornato System.out.println("sb2) " + sb2); // La modifica viene effettivamente fatta anche sull'originale sb1 System.out.println("4) " + sb1); // sb2 non è un nuovo oggetto ed ha lo stesso valore di sb1 } }
OUTPUT
Stringa di esempio Stringa di esempio Stringa 1) aaa bbb 2) aaaxxx bbb 3) bbb xxxaaa sb2) bbb xxxaaa yyyy 4) bbb xxxaaa yyyy