Dans Java, String, StringBuffer et StringBuilder sont souvent utilisés dans des classes de chaînes dans la programmation. La différence entre eux est également une question qui est souvent posée dans les entretiens. Maintenant, résumez et voyez en quoi ils sont différents et les mêmes.
1. Variable et immuable
La classe de chaîne utilise un tableau de caractères pour enregistrer les chaînes, comme suit: Parce qu'il existe un modificateur "final", vous pouvez savoir que les objets de chaîne sont immuables.
Valeur charbon finale privée [];
StringBuilder et StringBuffer sont hérités de la classe AbstractStringBuilder. Dans AbstractStringBuilder, les tableaux de caractères sont utilisés pour enregistrer les chaînes. Comme suit, on peut voir que les deux objets sont mutables.
valeur char [];
2. Est-ce multi-thread et sûr?
Les objets en chaîne sont immuables, ils peuvent donc être compris comme des constantes, qui sont évidemment en file d'attente.
AbstractStringBuilder est une classe de parents publics de StringBuilder et StringBuffer, qui définit certaines opérations de base de chaînes, telles que la capitalisation, la capacité d'agrandissement, l'ajout, l'insertion, l'indexé et d'autres méthodes publiques.
StringBuffer a ajouté un verrou de synchronisation à la méthode ou à un verrou de synchronisation à la méthode appelée, il est donc filé. Voir le code source suivant:
public synchronisé stringbuffer reverse () {super.reverse (); return this;} public int indexof (string str) {return indexof (str,); // Il y a une méthode publique Int Indexof (String Str, int FromIndex)} StringBuilder n'ajoute pas les verrous de synchronisation à la méthode, il est donc non-thread-safe.
3. StringBuilder et StringBuffer en commun
StringBuilder et StringBuffer ont des classes de parents publiques AbstractStringBuilder (classe abstraite).
L'une des différences entre les classes abstraites et les interfaces est que certaines méthodes publiques de sous-classes peuvent être définies dans les classes abstraites. Les sous-classes doivent seulement ajouter de nouvelles fonctions et n'ont pas besoin de répéter les méthodes existantes; tandis que les interfaces ne définissent que des méthodes et des constantes.
Les méthodes de StringBuilder et StringBuffer appellent des méthodes publiques dans AbstractStringBuilder, comme Super.Apend (...). C'est juste que StringBuffer ajoutera un mot-clé synchronisé à la méthode et le synchronisera.
Enfin, si le programme n'est pas multi-thread, l'utilisation de StringBuilder est plus efficace que StringBuffer.
Résumé de la différence entre String StringBuffer StringBuilder dans Java
* La classe String est une classe immuable. Tant que la chaîne est modifiée, de nouveaux objets seront générés.
* StringBuffer et StringBuilder sont tous deux des classes mutables, et aucun nouvel objet n'est généré par des modifications apportées aux chaînes.
Lorsque vous l'utilisez dans la pratique, si vous avez souvent besoin de modifier une chaîne, comme l'insertion, la suppression, etc.
* Mais quelle est la différence entre StringBuffer et StringBuilder?
StringBuffer est en filetage et est très pratique à utiliser dans les programmes multi-thread, mais l'efficacité du programme sera plus lente.
StringBuilder n'est pas thread-safe et est plus efficace que StringBuffer dans un seul thread.
* En général, le temps de fonctionnement des trois:
String> StringBuffer> StringBuilder