Vue d'ensemble et différences entre String, StringBuffer et StringBuilder

Aperçu

String :

Constante de chaîne, la longueur de la chaîne est immuable.

StringBuffer :

Variables de chaîne (synchronisées, c'est-à-dire thread-safe). Si vous souhaitez modifier fréquemment le contenu de la chaîne, il est préférable d'utiliser StringBuffer pour des raisons d'efficacité. Si vous souhaitez convertir en type String, vous pouvez appeler la méthode toString () de StringBuffer.

Les principales opérations sont les méthodes d'ajout et d'insertion:

  • La méthode append ajoute toujours ces caractères à la fin du tampon;
  • La méthode d'insertion ajoute des caractères au point spécifié.

StringBuilder :

Variables de chaîne (non thread-safe). En interne, l'objet StringBuilder est traité comme un tableau de longueur variable contenant une séquence de caractères.

Cette classe fournit une API compatible avec StringBuffer, mais ne garantit pas la synchronisation. Cette classe est conçue pour être utilisée comme un simple remplacement de StringBuffer, utilisé lorsque le tampon de chaîne est utilisé par un seul thread (cette situation est très courante).


La différence entre les trois

StringEt le type StringBufferde différence:

String est un objet immuable, donc chaque fois que le type String est modifié, un nouvel objet String sera généré, puis le pointeur pointera vers le nouvel objet String, il est donc préférable de ne pas utiliser String pour les chaînes qui changent fréquemment de contenu.

Lorsque vous utilisez la classe StringBuffer, chaque fois que vous opérez sur l'objet StringBuffer lui-même, au lieu de générer un nouvel objet et de modifier la référence de l'objet. Par conséquent, il est recommandé d'utiliser StringBuffer dans la plupart des cas, en particulier lorsque l'objet chaîne change fréquemment.

StringBuilderEt StringBufferla différence entre:

StringBuffer est thread-safe, StringBuilder n'est pas thread-safe.

Dans la même situation, l'utilisation de StringBuilder ne peut obtenir qu'une amélioration des performances d'environ 10% ~ 15% par rapport à l'utilisation de StringBuffer, mais au risque d'insécurité multi-threading.

Dans la plupart des cas, StringBuilder> StringBuffer. Ceci est principalement dû au fait que le premier n'a pas besoin de prendre en compte la sécurité des threads.


Utiliser la stratégie

(1) Principes de base: si vous souhaitez manipuler une petite quantité de données, utilisez String; un thread unique manipule de grandes quantités de données, utilisez StringBuilder; le multi-thread manipule de grandes quantités de données, utilisez StringBuffer.

(2) N'utilisez pas le "+" de la classe String pour des épissures fréquentes, car les performances sont extrêmement médiocres, vous devez utiliser la classe StringBuffer ou StringBuilder, qui est un principe plus important dans l'optimisation Java.
Par exemple:

String result = "";
for (String s : hugeArray) {
    
    
    result = result + s;
}

// 使用StringBuilder
StringBuilder sb = new StringBuilder();
for (String s : hugeArray) {
    
    
    sb.append(s);
}
String result = sb.toString();

Je suppose que tu aimes

Origine blog.csdn.net/qq_43229056/article/details/109255598
conseillé
Classement