Maison  >  Article  >  Java  >  Quelle est la différence entre stringbuffer et stringbuilder dans une chaîne ?

Quelle est la différence entre stringbuffer et stringbuilder dans une chaîne ?

coldplay.xixi
coldplay.xixioriginal
2020-07-02 14:14:424916parcourir

La différence entre stringbuffer et stringbuilder dans string est la suivante : 1. StringBuffer est thread-safe, tandis que StringBuilder n'est pas thread-safe ; 2. StringBuffer expose la synchronisation des méthodes, mais pas StringBuilder.

Quelle est la différence entre stringbuffer et stringbuilder dans une chaîne ?

La différence entre stringbuffer et stringbuilder dans string est :

Différence 1 : sécurité des threads

StringBuffer : thread-safe, StringBuilder : thread-unsafe. Parce que toutes les méthodes publiques de StringBuffer sont synchronisées et que StringBuilder n'est pas modifié par StringBuilder.

Extrait de code StringBuffer :

@Override
public synchronized StringBuffer append(String str) {
    toStringCache = null;
    super.append(str);
    return this;
}

Différence 2 : Buffer

Extrait de code StringBuffer :

private transient char[] toStringCache;
@Override
public synchronized String toString() {
    if (toStringCache == null) {
        toStringCache = Arrays.copyOfRange(value, 0, count);
    }
    return new String(toStringCache, true);
}

Extrait de code StringBuilder :

@Override
public String toString() {
    // Create a copy, don't share the array
    return new String(value, 0, count);
}

On peut voir que chaque fois que StringBuffer atteint toString, il utilisera directement la valeur toStringCache de la zone tampon pour construire une chaîne.

StringBuilder doit copier le tableau de caractères à chaque fois, puis construire une chaîne.

Ainsi, le vidage du cache est également une optimisation de StringBuffer, mais la méthode toString de StringBuffer est toujours synchrone.

Différence 3 : Performances

Étant donné que StringBuffer est thread-safe, toutes ses méthodes publiques sont synchronisées et StringBuilder ne verrouille ni ne synchronise les méthodes, donc il n'y a aucun doute que les performances de StringBuilder sont bien supérieures à celles de StringBuffer.

Recommandations d'apprentissage associées : Tutoriel vidéo Java

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