Der Unterschied zwischen Stringbuffer und Stringbuilder
Egal, ob Sie mit Java oder Android arbeiten, Sie werden mit diesem Problem normalerweise nicht zu kämpfen haben. Diese Frage ist in Vorstellungsgesprächen ein Muss Heute werde ich es zusammenfassen.
Unterschiede zwischen StringBuffer und StringBuilder
Die Methoden und Funktionen in StringBuffer und StringBuilder sind völlig gleichwertig, mit Ausnahme der Methoden in StringBuffer Die meisten von ihnen werden mit dem Schlüsselwort synchronisiert geändert, sodass sie Thread-sicher sind, gleichzeitige Vorgänge unterstützen und für die Verwendung in Multithreads geeignet sind. StringBuilder unterstützt keine gleichzeitigen Vorgänge, ist linear unsicher und nicht für die Verwendung in Multithreads geeignet. Die neu eingeführte StringBuilder-Klasse ist nicht threadsicher, aber ihre Leistung in einem einzelnen Thread ist höher als die von StringBuffer. (Empfohlenes Lernen: JAVA-Video-Tutorial)
Als nächstes füge ich direkt den Code des Testprozesses und der Ergebnisse ein, was auf einen Blick klar ist:
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); } }
Sehen Sie sich die Ausführungsergebnisse an:
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
Wie aus den obigen Ergebnissen ersichtlich ist, unabhängig vom Multithreading, wenn String-Objekte verwendet werden (ich habe Count/100 eingegeben), Die Ausführungszeit ist länger als bei den anderen beiden, und der Unterschied zwischen der Verwendung von StringBuffer-Objekten und der Verwendung von StringBuilder-Objekten ist ebenfalls offensichtlich. Es ist ersichtlich, dass wir, wenn unser Programm in einem einzelnen Thread ausgeführt wird oder keine Thread-Synchronisierungsprobleme berücksichtigt werden müssen, der Verwendung der StringBuilder-Klasse Vorrang einräumen sollten, wenn wir die Thread-Sicherheit gewährleisten möchten. Dies ist natürlich StringBuffer.
Wie aus den Testergebnissen der folgenden Liste ersichtlich ist, gibt es bis auf die unterschiedliche Unterstützung für Multithreading nahezu keinen Unterschied in der Verwendung und den Ergebnissen dieser beiden Klassen.
Weitere technische Artikel zum Thema JAVA finden Sie in der Spalte JAVA-Entwicklungs-Tutorial, um mehr darüber zu erfahren!
Das obige ist der detaillierte Inhalt vonDer Unterschied zwischen Stringbuffer und Stringbuilder. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen





StringBuffer-Objekte können im Allgemeinen sicher in Umgebungen mit mehreren Threads verwendet werden, in denen mehrere Threads möglicherweise gleichzeitig versuchen, auf dasselbe StringBuffer-Objekt zuzugreifen. StringBuilder ist ein threadsicherer Ersatz für die StringBuffer-Klasse, der viel schneller arbeitet, da er über keine synchronisierten > Methoden verfügt. Wenn wir viele Zeichenfolgenoperationen in einem einzelnen Thread ausführen, kann die Verwendung dieser Klasse die Leistung verbessern. Beispiel publicclassCompareBuilderwithBufferTest{ publicstaticvoidmain(String[]a

Konvertieren Sie einen StringBuffer mit der toString()-Methode der StringBuffer-Klasse. In Java ist die StringBuffer-Klasse eine Klasse, die zur Verarbeitung veränderlicher Strings verwendet wird. Sie bietet viele praktische Methoden zum Ändern und Bearbeiten von Strings. Wenn wir ein StringBuffer-Objekt in einen String konvertieren müssen, können wir dazu die Methode toString() verwenden. Die toString()-Methode der StringBuffer-Klasse gibt a zurück

Verwenden Sie die Methode reverse() der StringBuffer-Klasse, um einen String umzukehren. Beim Programmieren müssen wir häufig einige Operationen an Strings ausführen, beispielsweise das Umkehren von Strings. In Java können Sie die Methode reverse() der Klasse StringBuffer verwenden, um eine String-Umkehr zu erreichen. Werfen wir einen Blick auf die Verwendung dieser Methode. Zuerst müssen wir ein StringBuffer-Objekt erstellen und die umzukehrende Zeichenfolge als Parameter an seinen Konstruktor übergeben, wie unten gezeigt

Grundkonzepte der String-Klasse Die String-Klasse ist ein Referenzdatentyp, kein Basisdatentyp. In Java handelt es sich um ein String-Objekt, solange es in „“ (doppelte Anführungszeichen) eingeschlossen ist. Java legt fest, dass Zeichenfolgen in doppelten Anführungszeichen unveränderlich sind, was bedeutet, dass „abc“ von der Geburt bis zum Tod nicht zu „abcd“ oder „ab“ werden kann. Im JDK werden in doppelte Anführungszeichen eingeschlossene Zeichenfolgen im Zeichenfolgenkonstantenpool im Methodenbereich gespeichert. (Da in der tatsächlichen Entwicklung Zeichenfolgen sehr häufig verwendet werden, werden Zeichenfolgen aus Gründen der Ausführungseffizienz im String-Konstantenpool im Methodenbereich platziert.

Verwenden Sie die Methode substring() der Klasse StringBuffer, um einen Teilstring eines Strings abzurufen. In der Java-Programmierung ist es oft notwendig, Strings zu verarbeiten und zu bedienen. Die StringBuffer-Klasse ist eine häufig verwendete String-Klasse, die eine Reihe praktischer Methoden zum Betreiben von Strings bereitstellt. Unter diesen ist die Methode substring() eine sehr häufig verwendete Methode, mit der ein Teil des Inhalts einer Zeichenfolge, also eine Teilzeichenfolge, abgerufen werden kann. Im Folgenden wird die Verwendung der StringBuffer-Klasse vorgestellt

Wenn Sie Zeichenfolgen ändern, müssen Sie die Klassen StringBuffer und StringBuilder verwenden. Im Gegensatz zur String-Klasse können Objekte der StringBuffer- und StringBuilder-Klassen mehrmals geändert werden, ohne dass neue unbenutzte Objekte erstellt werden. StringBuffer: Bei Verwendung der StringBuffer-Klasse wird jedes Mal das StringBuffer-Objekt selbst bearbeitet, anstatt ein neues Objekt zu generieren. Wenn Sie also die Zeichenfolge ändern müssen, wird empfohlen, StringBuffer zu verwenden. StringBuilder: Die StringBuilder-Klasse wurde in Java5 vorgeschlagen und ähnelt S

Kehren Sie die Reihenfolge der Zeichen in einer Zeichenfolge um, indem Sie die Methode reverse() der StringBuffer-Klasse verwenden. In Java gibt es verschiedene Möglichkeiten, die Reihenfolge der Zeichen in einer Zeichenfolge umzukehren. Eine der einfachen und effizienten Methoden ist die Verwendung der reverse()-Methode der StringBuffer-Klasse. In diesem Artikel wird erläutert, wie Sie diese Methode zum Umkehren von Zeichenfolgen verwenden, und es werden relevante Codebeispiele bereitgestellt. Die StringBuffer-Klasse ist eine veränderbare Klasse in Java, die zur Verarbeitung von Zeichenfolgen verwendet wird. Im Gegensatz zur String-Klasse

Verwenden Sie die insert()-Methode der StringBuffer-Klasse, um in Java Inhalte in einen String einzufügen. In der Java-Programmierung ist die StringBuffer-Klasse eine sehr häufig verwendete String-Manipulationsklasse. Es bietet eine Vielzahl von Methoden zum Ändern von Zeichenfolgen, unter denen die Methode insert() eine sehr praktische Methode zum Einfügen von Inhalten in eine Zeichenfolge ist. Die Funktion der Methode insert() besteht darin, ein Zeichen, ein Zeichenarray, eine Zeichenfolge oder eine aus anderen Datentypen konvertierte Zeichenfolge an der angegebenen Position einzufügen.
