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