La plupart des réponses ici sont correctes (il est géré par le compilateur, + est converti en .append() ...)
Je voulais ajouter que tout le monde devrait jeter un oeil au code source de String et ajouter à un moment donné, c'est assez impressionnant.
je crois qu'il est descendu à quelque chose comme:
"a"+"b"+"c"
=
new String().append("a").append("b").append("c")
Mais quelque chose de magique se produit. Cela se transforme en:
- Créer un tableau de chaînes de longueur 3
- copie un dans la première position.
- copie b dans la deuxième
- copie c dans le troisième
Alors que la plupart des gens croient que cela va créer « ab », puis le jeter quand il crée « abc ». Il comprend en fait qu'il est enchaîné et qu'il fait des manipulations.
Il y a aussi un truc où si vous avez la chaîne "abc" et que vous demandez une sous-chaîne qui s'avère être "bc", ils peuvent partager exactement le même tableau sous-jacent. Vous remarquerez qu'il y a une position de départ, une position de fin et un drapeau "partagé".
En fait, si ce n'est pas partagé, il est possible qu'elle prolonger la longueur d'une chaîne et copier les autres dans.
Maintenant, je suis juste confus. Lisez le code source - c'est plutôt cool.
'StringBuilder' devrait être préféré lorsque la synchronisation n'est pas un problème. – gpampara
@gpampara Le compilateur sait utiliser StringBuilder. StringBuffer a été utilisé dans les anciennes versions avant l'introduction de StringBuilder. –