La différence entre stringbuffer et stringbuilder
Que vous travailliez sur Java ou Android, vous ne pouvez pas éviter de rencontrer ce problème. En fait, vous n'avez généralement pas de difficulté avec cela pendant le processus de développement. Cette question est une question classique incontournable dans les entretiens. temps aujourd'hui, je vais le résumer.
Différences entre StringBuffer et StringBuilder
Les méthodes et fonctions de StringBuffer et StringBuilder sont complètement équivalentes, à l'exception des méthodes de StringBuffer La plupart d'entre eux sont modifiés avec le mot-clé synchronisé, ils sont donc thread-safe, prennent en charge les opérations simultanées et conviennent à une utilisation multi-thread. StringBuilder ne prend pas en charge les opérations simultanées, est linéairement dangereux et ne convient pas à une utilisation multithread. La classe StringBuilder nouvellement introduite n'est pas thread-safe, mais ses performances dans un seul thread sont supérieures à celles de StringBuffer. (Apprentissage recommandé : Tutoriel vidéo JAVA)
Ensuite, je colle directement le code du processus de test et des résultats, qui est clair en un coup d'œil :
public class StringTest { public static String BASEINFO = "Mr.Y"; public static final int COUNT = 2000000; /** * 执行一项String赋值测试 */ public static void doStringTest() { String str = new String(BASEINFO); long starttime = System.currentTimeMillis(); for (int i = 0; i < COUNT / 100; i++) { str = str + "miss"; } long endtime = System.currentTimeMillis(); System.out.println((endtime - starttime) + " millis has costed when used String."); } /** * 执行一项StringBuffer赋值测试 */ public static void doStringBufferTest() { StringBuffer sb = new StringBuffer(BASEINFO); long starttime = System.currentTimeMillis(); for (int i = 0; i < COUNT; i++) { sb = sb.append("miss"); } long endtime = System.currentTimeMillis(); System.out.println((endtime - starttime) + " millis has costed when used StringBuffer."); } /** * 执行一项StringBuilder赋值测试 */ public static void doStringBuilderTest() { StringBuilder sb = new StringBuilder(BASEINFO); long starttime = System.currentTimeMillis(); for (int i = 0; i < COUNT; i++) { sb = sb.append("miss"); } long endtime = System.currentTimeMillis(); System.out.println((endtime - starttime) + " millis has costed when used StringBuilder."); } /** * 测试StringBuffer遍历赋值结果 * * @param mlist */ public static void doStringBufferListTest(List<String> mlist) { StringBuffer sb = new StringBuffer(); long starttime = System.currentTimeMillis(); for (String string : mlist) { sb.append(string); } long endtime = System.currentTimeMillis(); System.out.println(sb.toString() + "buffer cost:" + (endtime - starttime) + " millis"); } /** * 测试StringBuilder迭代赋值结果 * * @param mlist */ public static void doStringBuilderListTest(List<String> mlist) { StringBuilder sb = new StringBuilder(); long starttime = System.currentTimeMillis(); for (Iterator<String> iterator = mlist.iterator(); iterator.hasNext();) { sb.append(iterator.next()); } long endtime = System.currentTimeMillis(); System.out.println(sb.toString() + "builder cost:" + (endtime - starttime) + " millis"); } public static void main(String[] args) { doStringTest(); doStringBufferTest(); doStringBuilderTest(); List<String> list = new ArrayList<String>(); list.add(" I "); list.add(" like "); list.add(" BeiJing "); list.add(" tian "); list.add(" an "); list.add(" men "); list.add(" . "); doStringBufferListTest(list); doStringBuilderListTest(list); } }
Regardez les résultats d'exécution :
2711 millis has costed when used String. 211 millis has costed when used StringBuffer. 141 millis has costed when used StringBuilder. I like BeiJing tian an men . buffer cost:1 millis I like BeiJing tian an men . builder cost:0 millis
Comme le montrent les résultats ci-dessus, quel que soit le multi-threading, lors de l'utilisation d'objets String (je mets Count/100), le temps d'exécution est plus long que les deux autres High, et la différence entre l'utilisation d'objets StringBuffer et l'utilisation d'objets StringBuilder est également évidente. On peut voir que si notre programme s'exécute dans un seul thread, ou s'il n'est pas nécessaire de prendre en compte les problèmes de synchronisation des threads, nous devons donner la priorité à l'utilisation de la classe StringBuilder si nous voulons garantir la sécurité des threads, c'est naturellement StringBuffer ;
Comme le montrent les résultats des tests de la liste suivante, à l'exception de la prise en charge différente du multi-threading, il n'y a presque aucune différence dans l'utilisation et les résultats de ces deux classes.
Pour plus d'articles techniques liés à JAVA, veuillez visiter la colonne Tutoriel de développement JAVA 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!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Les objets StringBuffer sont généralement sûrs à utiliser dans des environnements multithread, où plusieurs threads peuvent tenter d'accéder simultanément au même objet StringBuffer. StringBuilder est un remplacement thread-safe de la classe StringBuffer qui fonctionne beaucoup plus rapidement car il n'a pas de méthodes synchronisées. Si nous effectuons de nombreuses opérations sur les chaînes dans un seul thread, l'utilisation de cette classe peut améliorer les performances. Exemple publicclassCompareBuilderwithBufferTest{ publicstaticvoidmain(String[]a

Convertissez un StringBuffer en chaîne à l'aide de la méthode toString() de la classe StringBuffer. En Java, la classe StringBuffer est une classe utilisée pour gérer les chaînes mutables. Elle fournit de nombreuses méthodes pratiques pour modifier et manipuler des chaînes. Lorsque nous devons convertir un objet StringBuffer en chaîne, nous pouvons utiliser la méthode toString() pour y parvenir. La méthode toString() de la classe StringBuffer renvoie un

Utilisez la méthode reverse() de la classe StringBuffer pour inverser une chaîne. En programmation, nous devons souvent effectuer certaines opérations sur les chaînes, comme inverser des chaînes. En Java, vous pouvez utiliser la méthode reverse() de la classe StringBuffer pour réaliser l'inversion de chaîne. Jetons un coup d'œil à l'utilisation de cette méthode. Tout d'abord, nous devons créer un objet StringBuffer et transmettre la chaîne à inverser en tant que paramètre à son constructeur, comme indiqué ci-dessous.

Concepts de base de la classe String La classe String est un type de données de référence et non un type de données de base. En Java, tant qu'il est entouré de "" (guillemets doubles), il s'agit d'un objet String. Java stipule que les chaînes entre guillemets doubles sont immuables, ce qui signifie que « abc » ne peut pas devenir « abcd » ou « ab » de la naissance à la mort. Dans le JDK, les chaînes entre guillemets doubles sont stockées dans le pool de constantes de chaîne dans la zone des méthodes. (Étant donné que dans le développement réel, les chaînes sont utilisées très fréquemment, pour des raisons d'efficacité d'exécution, les chaînes sont placées dans le pool de constantes de chaînes dans la zone des méthodes.

Utilisez la méthode substring() de la classe StringBuffer pour obtenir une sous-chaîne d'une partie d'une chaîne. En programmation Java, il est souvent nécessaire de traiter et d'exploiter des chaînes. La classe StringBuffer est une classe de chaînes couramment utilisée qui fournit une série de méthodes pratiques pour faire fonctionner les chaînes. Parmi elles, la méthode substring() est une méthode très couramment utilisée, qui peut être utilisée pour obtenir une partie du contenu d'une chaîne, c'est-à-dire une sous-chaîne. Ce qui suit présentera comment utiliser la classe StringBuffer

Lors de la modification de chaînes, vous devez utiliser les classes StringBuffer et StringBuilder. Contrairement à la classe String, les objets des classes StringBuffer et StringBuilder peuvent être modifiés plusieurs fois sans créer de nouveaux objets inutilisés. StringBuffer : lors de l'utilisation de la classe StringBuffer, l'objet StringBuffer lui-même sera exploité à chaque fois au lieu de générer un nouvel objet, donc si vous devez modifier la chaîne, il est recommandé d'utiliser StringBuffer. StringBuilder : La classe StringBuilder a été proposée en Java5, et elle est similaire à S

Inverser l'ordre des caractères dans une chaîne à l'aide de la méthode reverse() de la classe StringBuffer. En Java, il existe différentes manières d'inverser l'ordre des caractères dans une chaîne. L’une des méthodes simples et efficaces consiste à utiliser la méthode reverse() de la classe StringBuffer. Cet article explique comment utiliser cette méthode pour inverser des chaînes et fournit des exemples de code pertinents. La classe StringBuffer est une classe mutable en Java utilisée pour traiter les chaînes. Contrairement à la classe String,

Utilisez la méthode insert() de la classe StringBuffer pour insérer du contenu dans une chaîne en Java. En programmation Java, la classe StringBuffer est une classe de manipulation de chaînes très couramment utilisée. Il fournit une variété de méthodes pour modifier des chaînes, parmi lesquelles la méthode insert() est une méthode très pratique pour insérer du contenu dans une chaîne. La méthode insert() est utilisée pour insérer un caractère, un tableau de caractères, une chaîne ou une chaîne convertie à partir d'autres types de données à la position spécifiée.
