java - 字符串类StringBuffer和StringBuilder叫字符串缓冲区,请问哪里体现缓冲了?
PHPz
PHPz 2017-04-18 10:31:19
0
4
655

字符串类StringBuffer和StringBuilder叫字符串缓冲区,请问哪里体现缓冲了?

PHPz
PHPz

学习是最好的投资!

répondre à tous(4)
小葫芦

É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 <.>

Ty80

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.

Peter_Zhu

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"

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal