La maggior parte delle risposte qui sono corrette (è gestito dal compilatore, + viene convertito in .Append() ...)
Volevo aggiungere che tutti dovrebbero dare un'occhiata al codice sorgente di String e append ad un certo punto, è piuttosto impressionante.
credo è venuto giù a qualcosa di simile:
"a"+"b"+"c"
=
new String().append("a").append("b").append("c")
Ma poi qualcosa di magico accade. Questo diventa:
- creare una matrice stringa di lunghezza 3
- copia una nella prima posizione.
- copia b nella seconda
- copy c nel terzo
Mentre la maggior parte delle persone credono che creerà "ab", poi gettarlo via quando si crea "abc". In realtà capisce che è incatenato e fa qualche manipolazione.
C'è anche un trucco in cui se si ha la stringa "abc" e si richiede una sottostringa che risulta essere "bc", possono condividere lo stesso array sottostante. Noterai che c'è una posizione iniziale, una posizione finale e un flag "condiviso".
Infatti, se non è condiviso, è possibile per poter estendere la lunghezza di una stringa e copiare gli altri in.
Ora sto solo di essere fonte di confusione. Leggi il codice sorgente: è abbastanza bello.
fonte
2010-02-24 18:44:36
'StringBuilder' dovrebbe essere preferito quando la sincronizzazione non è un problema. – gpampara
@gpampara Il compilatore sa usare StringBuilder. StringBuffer è stato utilizzato nelle vecchie versioni prima dell'introduzione di StringBuilder. –