È più generale di "loop interni": è ogni volta che si desidera eseguire la concatenazione su più istruzioni e non è necessario il risultato intermedio come stringa. Per esempio:
StringBuilder builder = new StringBuilder("Start");
if (someCondition) {
builder.append("Foo");
}
if (someOtherCondition) {
builder.append("Bar");
}
builder.append("End");
String result = builder.toString();
Mentre si potrebbe scrivere che come:
String result = "Start" + (someCondition ? "Foo" : "")
+ (someOtherCondition ? "Bar" : "") + "End";
... che diventa difficile da leggere. E se ci sono più dichiarazioni all'interno dei corpi if
, potrebbe non essere nemmeno fattibile.
correggere qualcosa all'interno della vostra domanda però:
A quanto ho capito, quando faccio String baz = + "bar" "pippo" + "123" il compilatore java sostituisce internamente l'espressione con uno StringBuilder .
No, quando si scrive che l'espressione il compilatore riconosce che si tratta di una fase di compilazione costante, e lo sostituisce con
String baz = "foobar123";
Questa è una buona ragione non utilizzare in modo esplicito un StringBuilder
- il codice di cui sopra è chiaramente più efficace al momento dell'esecuzione di
String baz = new StringBuilder("foo").append("bar").append("123").toString();
Quando non è una costante in fase di compilazione, il compilatore Java eseguirà la concatenazione utilizzando un StringBuilder
, in genere lasciandovi un codice più comprensibile che non con l'uso esplicito di StringBuilder
, ma senza alcun impatto sulle prestazioni. Ho il sospetto che il tuo insegnante non capisca correttamente la concatenazione di stringhe, o semplicemente abbia letto da qualche altra parte che dovresti usare StringBuilder
senza comprendere completamente quando è appropriato il.
fonte
2014-07-04 09:55:23
'di utilizzare sempre un explicitly' StringBuilder - non è buona pratica. Sacrificerai la leggibilità del codice per il guadagno di prestazioni del 0,0000000000001%. Usa StringBuilder quando vuoi aggiungere in un ciclo migliaia di stringhe. –
Non sono sicuro del motivo per cui l'insegnante java è così appassionata di usare StringBuilder. StringBuilder è bello e tutto tranne java lo gestisce internamente. – nafas
L'insegnante ha torto. Hai ragione. –