Maison  >  Article  >  Java  >  Explication détaillée des différences entre String, StringBuffer et StringBuilder en Java

Explication détaillée des différences entre String, StringBuffer et StringBuilder en Java

黄舟
黄舟original
2017-08-20 09:35:081617parcourir

Cet article présente principalement les différences entre String, StringBuffer et StringBuilder en Java et les informations associées sur la façon de l'utiliser. Dans le processus de développement, la classe String est souvent utilisée pour les opérations. Les amis dans le besoin peuvent s'y référer.

La différence entre String, StringBuffer et StringBuilder en Java et comment l'utiliser

1. La valeur de String est immuable , ce qui fait que chaque opération sur String génère un nouvel objet String, ce qui est non seulement inefficace, mais gaspille également beaucoup d'espace mémoire limité.

String a = "a"; //Supposons que a pointe vers l'adresse 0x0001


a = "b"; //Après la réaffectation, a pointe vers l'adresse 0x0002, mais 0x0001 Le "a" enregistré dans l'adresse existe toujours, mais il n'est plus pointé par a. A pointe déjà vers une autre adresse.


Par conséquent, les opérations sur chaîne consistent uniquement à modifier l'adresse d'affectation plutôt qu'à modifier la valeur.


2. StringBuffer est une classe mutable,

et une classe d'opération de chaîne thread-safe. Toute opération sur la chaîne vers laquelle elle pointe ne créera pas de nouvel objet. Chaque objet StringBuffer a une certaine capacité de tampon. Lorsque la taille de la chaîne ne dépasse pas la capacité, aucune nouvelle capacité ne sera allouée. Lorsque la taille de la chaîne dépasse la capacité, la capacité sera automatiquement augmentée.


3. StringBuffer

  StringBuffer buf=new StringBuffer(); //分配长16字节的字符缓冲区
  StringBuffer buf=new StringBuffer(512); //分配长512字节的字符缓冲区
  StringBuffer buf=new StringBuffer("this is a test")//在缓冲区中存放了字符串,并在后面预留了16字节的空缓冲区。

Les fonctions des classes StringBuffer et StringBuilder sont fondamentalement similaires, la principale La différence réside dans la classe StringBuffer. La méthode est multithread et sûre, tandis que StringBuilder n'est pas thread-safe. En comparaison, la classe StringBuilder est légèrement plus rapide. Pour les chaînes dont les valeurs changent souvent, les classes StringBuffer et StringBuilder doivent être utilisées.
1) Tout d'abord, String, StringBuffer et StringBuilder sont tous définis comme classes finales dans le JDK, ce qui signifie qu'ils ne peuvent pas être hérités.

2) String est le plus courant. Par rapport à StringBuffer, String a des performances moins bonnes car un nouvel objet String sera régénéré lorsque le type String est modifié. Cela est évident lors des opérations d'épissage de chaîne. les changements fréquents ne doivent pas utiliser String Si le multithreading n'est pas pris en compte, StringBuilder doit être utilisé.

3) Une fois que StringBuffer a généré un objet, lors de l'exécution d'opérations d'épissage de chaîne, appelez simplement la méthode append. Aucun nouvel objet ne sera généré. Seul l'objet lui-même sera exploité. De plus, StringBuffer est thread-safe, il convient donc à une utilisation multi-thread. Pour cette raison, la vitesse sera plus lente que StringBuilder.

4) L'utilisation de StringBuilder est similaire à StringBuffer, mais il n'est pas thread-safe, il est donc généralement utilisé dans des threads uniques et est plus efficace que StringBuffer.

En résumé, lequel choisir doit être pris en compte sous de nombreux aspects tels que les performances de la mémoire, la sécurité des threads, l'efficacité d'exécution, etc. La réponse peut être obtenue à partir des comparaisons ci-dessus.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn