Étant donné que les chaînes de Java sont stockées en mémoire d'une longueur fixe, tous les ajouts, suppressions et modifications des chaînes nécessitent la création d'une nouvelle mémoire et une copie de la mémoire.
Les méthodes de traitement de StringBuffer et StringBuilder sont différentes des ajouts, suppressions et modifications de chaînes ordinaires. Elles s'appliquent d'abord à la mémoire pour éviter les applications de mémoire fréquentes.
Par exemple, nous épissonnons respectivement "a", "b" et "c". Si vous utilisez "a" + "b" + "c", (sans optimisation), Java demandera d'abord une mémoire de deux octets et copiera "a" et "b" dans cette mémoire. Ensuite, demandera une mémoire de trois octets. et copiez "ab" et "c" dans cette mémoire. Avec StringBuffer ou StringBuilder, ils demanderont d'abord une grande mémoire (la valeur par défaut est de 16 octets). Lorsque nous effectuons l'épissage, il nous suffit de copier directement "a", "b" et "c" dans cette mémoire. il, pas besoin de demander de la mémoire à plusieurs reprises. La manière de présenter une demande puis de l'utiliser reflète ici le concept de zone tampon.
Aucun nouvel objet n'est généré. Chaque fois que + est utilisé avec String, un nouvel objet sera généré. Bien entendu, le compilateur effectuera une optimisation de la compilation dans un court laps de temps, et le tampon sera directement ajouté à l'objet d'origine et ne générera pas de nouvel objet <.>
Prenons StringBuilder comme exemple ici. Regardez le code source. Le stockage interne de StringBuilder est stocké à l'aide d'un tableau char lors de l'ajout, la chaîne suivante sera copiée dans le tableau char à l'intérieur de StringBuilder. , il utilisera Go to System.arrayCopy pour implémenter un mécanisme d'expansion, ce qui est très efficace. C'est ainsi que la mise en mémoire tampon est implémentée.
String d = "a" + "b" + "c"; produira plusieurs objets chaîne Comme répondu ci-dessus, la raison est qu'il existe un pool de tampons de chaîne à l'intérieur de la machine virtuelle.
Étant donné que les chaînes de Java sont stockées en mémoire d'une longueur fixe, tous les ajouts, suppressions et modifications des chaînes nécessitent la création d'une nouvelle mémoire et une copie de la mémoire.
Les méthodes de traitement de StringBuffer et StringBuilder sont différentes des ajouts, suppressions et modifications de chaînes ordinaires. Elles s'appliquent d'abord à la mémoire pour éviter les applications de mémoire fréquentes.
Par exemple, nous épissonnons respectivement "a", "b" et "c". Si vous utilisez "a" + "b" + "c", (sans optimisation), Java demandera d'abord une mémoire de deux octets et copiera "a" et "b" dans cette mémoire. Ensuite, demandera une mémoire de trois octets. et copiez "ab" et "c" dans cette mémoire.
Avec StringBuffer ou StringBuilder, ils demanderont d'abord une grande mémoire (la valeur par défaut est de 16 octets). Lorsque nous effectuons l'épissage, il nous suffit de copier directement "a", "b" et "c" dans cette mémoire. il, pas besoin de demander de la mémoire à plusieurs reprises. La manière de présenter une demande puis de l'utiliser reflète ici le concept de zone tampon.
Aucun nouvel objet n'est généré. Chaque fois que + est utilisé avec String, un nouvel objet sera généré. Bien entendu, le compilateur effectuera une optimisation de la compilation dans un court laps de temps, et le tampon sera directement ajouté à l'objet d'origine et ne générera pas de nouvel objet <.>
Prenons StringBuilder comme exemple ici. Regardez le code source. Le stockage interne de StringBuilder est stocké à l'aide d'un tableau char lors de l'ajout, la chaîne suivante sera copiée dans le tableau char à l'intérieur de StringBuilder. , il utilisera Go to System.arrayCopy pour implémenter un mécanisme d'expansion, ce qui est très efficace. C'est ainsi que la mise en mémoire tampon est implémentée.
String d = "a" + "b" + "c"; produira plusieurs objets chaîne Comme répondu ci-dessus, la raison est qu'il existe un pool de tampons de chaîne à l'intérieur de la machine virtuelle.
Normal "a" + "b" + "c"
est un
qui générera des objets chaîne "ab"Mais utiliser ces deux classes ne générera que le dernier objet "abc"