Nel tuo semplice esempio, nessuno perché il compilatore utilizza StringBuilder
per eseguire la concatenazione di stringhe. Se la concatenazione si è verificata in un ciclo, tuttavia, il compilatore potrebbe creare diversi oggetti StringBuilder
e String
. Ad esempio:
String s= "" ;
for(int i= 0 ; i < 10 ; i++)
s+= "a" ;
Ogni volta che viene eseguita sopra la linea 3, viene creato un oggetto StringBuilder
, il contenuto di s
accodati, "a" annesso, e quindi il StringBuilder
viene convertito in una stringa da assegnare ritorna s
. Un totale di 10 StringBuilder
se 10 String
s.
Viceversa, in
StringBuilder sb= new StringBuilder() ;
for(int i= 0 ; i < 10 ; i++)
sb.append("a");
String s= sb.toString() ;
Solo vengono creati 1 StringBuilder
e 1 String
.
Il motivo principale di ciò è che il compilatore non può essere abbastanza intelligente da capire che il primo ciclo è equivalente al secondo e genera un codice più efficiente (byte). Nei casi più complessi, è impossibile sapere anche per il compilatore più intelligente. Se hai assolutamente bisogno di questa ottimizzazione, devi introdurla manualmente usando StringBuilder
s in modo esplicito.
fonte
2013-08-26 21:40:42
Nel tuo semplice esempio, potrebbe non esserci alcun vantaggio. Gli StringBuilder sono utili perché, quando ti concateni con +, crei stringhe nuove ogni volta che ti concatri. StringBuilder è quindi più efficiente per concatenare un gran numero di stringhe. –