Maison  >  Article  >  Java  >  Une brève discussion sur les différences entre String, StringBuffer et StringBuilder

Une brève discussion sur les différences entre String, StringBuffer et StringBuilder

青灯夜游
青灯夜游avant
2019-11-27 17:15:541779parcourir

Dans les entretiens de développement Java, on nous pose souvent des questions sur les différences entre String, StringBuider et StringBuffer. De nombreuses personnes ne répondent pas de manière suffisamment complète et approfondie, alors quelles sont les différences entre eux ?

Une brève discussion sur les différences entre String, StringBuffer et StringBuilder

Tous les trois sont utilisés pour opérer des chaînes. String est généralement utilisé pour définir une variable, tandis que StringBuilder StringBuffer est généralement utilisé pour épisser des chaînes et d'autres opérations. Mais en fait, String peut également être utilisé pour épisser des chaînes, mais pourquoi l’utilisons-nous rarement commençons par les codes sous-jacents des trois ?

Une brève discussion sur les différences entre String, StringBuffer et StringBuilder

Le code sous-jacent de String est un tableau de caractères modifié avec final, ce qui signifie qu'après avoir défini une variable String, le contenu de la variable est immuable.

Une brève discussion sur les différences entre String, StringBuffer et StringBuilder

Une brève discussion sur les différences entre String, StringBuffer et StringBuilder

Une brève discussion sur les différences entre String, StringBuffer et StringBuilder

StringBuilder et StringBuffer héritent tous deux de AbstractStringBuilder, et le tableau de caractères de cette classe ne le fait pas. utilisez la Modification finale, le contenu est variable, qu'est-ce que cela signifie ?

Par exemple :

String s1= "a";
String s2 = new String("b") ;
String s3 = s1+s2;

Si c'est le cas, nous obtenons la chaîne "ab", car il n'y a pas de chaîne immuable en bas de String, donc trois objets seront créés, qui seront tous occupent de la mémoire, et ces trois objets n'ont jamais perdu de références, donc le jvm ne peut pas être récupéré, ce qui entraîne un gaspillage important de ressources mémoire. Ce n'est pas recommandé dans notre développement, mais StringBuilder et StringBuffer n'ont pas un tel problème.

Une brève discussion sur les différences entre String, StringBuffer et StringBuilder

Une brève discussion sur les différences entre String, StringBuffer et StringBuilder

Une brève discussion sur les différences entre String, StringBuffer et StringBuilder

Grâce au code sous-jacent, nous pouvons voir que StringBuilder et StringBuffer sont utilisés lors de l'épissage de chaînes. Déterminez si la longueur de la chaîne est suffisante et créez un nouveau tableau pour encapsuler les données, tandis que l'objet d'origine est abandonné en référence et attend le garbage collection, réduisant ainsi le gaspillage de mémoire. Par conséquent, lors de l'épissage des chaînes et d'autres opérations, nous avons l'habitude de le faire. utilisez StringBuilder et StringBuffer, mais l'efficacité d'exécution des deux est différente. StringBuilder a une efficacité d'exécution plus élevée. Pourquoi?

Une brève discussion sur les différences entre String, StringBuffer et StringBuilder

Une brève discussion sur les différences entre String, StringBuffer et StringBuilder

Grâce au code source sous-jacent, vous pouvez constater que StringBuffer utilise des verrous de synchronisation lors de l'épissage des chaînes, ce qui améliore la sécurité, mais pas StringBuilder. utilisez-le. Verrouillage de synchronisation, donc l'efficacité est améliorée.

Maintenant, vous devriez comprendre les différences entre les trois ! !

Cet article provient de la rubrique Introduction Java, bienvenue pour apprendre !

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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer