Comment un StringBuilder
mis en oeuvre pour éviter le problème immuable de l' allocation de chaîne?
StringBuilder aliasA = new StringBuilder("a");
StringBuilder dot = new StringBuilder(".");
Clausula clause1 = new Clausula(aliasA.append(dot).append("id").toString());
Clausula clause2 = new Clausula(aliasA.append(dot).append("name").toString());
En utilisant un char
tableau. Vous pouvez le voir dans la source JDK. Dans 1.8 JDK (celui que je la source à portée de main), StringBuilder
est construit sur AbstractStringBuilder
qui utilise pour contenir les données:
char[] value;
int count;
( Karol Dowbecki dit que 9 « parfois JDK » utilisations au byte
lieu de char
, je n'ai aucune raison de douter de lui :-).)
count
dit la classe combien value
est par rapport à des données réelles que l' espace disponible dans le tableau. Il commence avec un char[16]
( à moins que vous dire à l' avance quelle capacité vous pourriez avoir besoin) et réaffecte et des copies au besoin.
Il crée uniquement une chaîne lorsque vous appelez toString
, en utilisant le String(char[],int,int)
constructeur (ou sans doute l' un acceptant byte[]
parfois JDK9) pour faire une copie de la partie du contenu du tableau qui sont réellement utilisés:
public String toString() {
// Create a copy, don't share the array
return new String(value, 0, count);
}