String, StringBuffer et StringBuilder dans Java sont des classes de chaînes souvent utilisées dans la programmation. Pour résumer, regardez leurs différences et les mêmes.
1. Variable et inchangée
La classe de chaîne utilise le tableau de caractères pour enregistrer la chaîne.
Valeur charbon finale privée [];
StringBuilder et StringBuffer sont hérités de la classe AbstractStringBuilder.
valeur char [];
2. Est-ce sûr?
Les objets en chaîne sont immuables, ce qui peut être compris comme constant, évidemment le fil est sûr.
AbstractStringBuilder est une classe de parent public entre StringBuilder et StringBuffer, définissant les opérants de base d'une chaîne, tels que la capitalisation, l'ajout, l'insertion, l'indexation et d'autres méthodes publiques.
StringBuffer ajoute un verrou synchrone ou la méthode d'appel est ajoutée à la méthode, donc c'est du thread -afe. Voir le code source suivant:
Copier le code du code comme suit:
Public synchronisé stringbuffer reverser () {{) {
Super.reverse ();
Retourner ceci;
}
public int indexof (String str) {
RETOUR INDEXOF (STR, 0);
}
StringBuilder n'a pas de verrouillage synchrone sur la méthode, il s'agit donc d'une sécurité non thré.
3. StringBuilder et StringBuffer en commun
StringBuilder et StringBuffer ont un parent public -class AbstractStringBuilder (classe abstraite).
L'une des différences entre les classes abstraites et les interfaces est: certaines méthodes publiques de certaines sous-classes peuvent être définies dans les classes abstraites. de la méthode dans l'interface.
Les méthodes de StringBuilder et StringBuffer appellent toutes des méthodes publiques dans AbstractStringBuilder, telles que Super.Appentend (...). C'est juste que StringBuffer ajoutera le mot clé synchronisé à la méthode à synchroniser.
Enfin, si le programme n'est pas multi-thread, l'efficacité de l'utilisation de StringBuilder est supérieure à StringBuffer.