Maison Java javaDidacticiel La différence entre stringbuffer et stringbuilder

La différence entre stringbuffer et stringbuilder

Jun 04, 2019 pm 01:19 PM
stringbuffer

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.

La différence entre stringbuffer et stringbuilder

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);
	}
 
}
Copier après la connexion

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
Copier après la connexion

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!

Déclaration de ce site Web
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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

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 !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

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

En Java, comment comparer StringBuilder et StringBuffer ? En Java, comment comparer StringBuilder et StringBuffer ? Aug 28, 2023 pm 03:57 PM

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

Convertir StringBuffer en chaîne à l'aide de la méthode toString() de la classe StringBuffer Convertir StringBuffer en chaîne à l'aide de la méthode toString() de la classe StringBuffer Jul 25, 2023 pm 06:45 PM

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 Utilisez la méthode reverse() de la classe StringBuffer pour inverser une chaîne Jul 24, 2023 pm 04:41 PM

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.

Comment utiliser la classe String, StringBuffer et StringBuilder en Java ? Comment utiliser la classe String, StringBuffer et StringBuilder en Java ? Apr 21, 2023 pm 07:22 PM

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 la sous-chaîne d'une partie de la chaîne. Utilisez la méthode substring() de la classe StringBuffer pour obtenir la sous-chaîne d'une partie de la chaîne. Jul 24, 2023 pm 12:41 PM

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

Comment utiliser StringBuffer et StringBuilder en Java Comment utiliser StringBuffer et StringBuilder en Java Jun 02, 2023 pm 03:01 PM

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

Inversez l'ordre des caractères dans une chaîne à l'aide de la méthode reverse() de la classe StringBuffer Inversez l'ordre des caractères dans une chaîne à l'aide de la méthode reverse() de la classe StringBuffer Jul 26, 2023 pm 10:10 PM

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,

Insérer du contenu dans une chaîne en Java à l'aide de la méthode insert() de la classe StringBuffer Insérer du contenu dans une chaîne en Java à l'aide de la méthode insert() de la classe StringBuffer Jul 24, 2023 am 11:34 AM

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.

See all articles