Unterschied zwischen String und StringBuilder

In diesem Artikel stellen String und StringBuilder die Folge von Zeichen dar. Der erste Unterschied besteht darin, dass sich die String-Klasse im System-Namespace befindet, während sich StringBuilder im System befindet. Text-Namespace.

Der Hauptunterschied ist:

String ist unveränderlich : Sobald Sie eine Instanz von String erstellt haben, können Sie diese nicht mehr ändern. Wenn Sie den Wert der Zeichenfolge ändern, wird die alte Instanz beibehalten und eine neue Instanz mit neuem Wert im Speicher erstellt.

StringBuilder ist veränderbar : Wenn Sie den Wert von string mit StringBuilder ändern, wird keine neue Instanz erstellt, sondern der Wert in der vorhandenen Instanz aktualisiert.

Head to Head Vergleich zwischen String und StringBuilder (Infografik)

Nachfolgend sind die Top-8-Vergleiche zwischen String und StringBuilder aufgeführt :

Hauptunterschiede zwischen String und StringBuilder

Lassen Sie uns einige wichtige Unterschiede zwischen String und StringBuilder in den folgenden Punkten diskutieren:

1. Während Sie mit der String-Klasse arbeiten, erstellen Sie jedes Mal, wenn Sie einige Operationen an Ihrem String ausführen, den gesamten String im Speicher neu, während StringBuilder etwas Pufferplatz im Speicher zuweist und Änderungen an diesem Pufferraum vornimmt.

2. Da das StringBuilder-Objekt veränderbar ist, bietet es eine bessere Leistung als das String-Objekt, wenn schwere String-Manipulationen vorgenommen werden.

Lassen Sie uns die obigen Punkte anhand eines Beispiels verstehen:

Code:

using System;
using System.Text;
using System.Diagnostics;
public class StringAndStringBuilder
(
static void Main()
(
//using Stopwatch to calculate time
Stopwatch stopWatch = new Stopwatch();
string str = string.Empty;
//starting stop watch
stopWatch.Start();
for (int i = 0; i < 1000; i++)
(
str += i.ToString();
)
stopWatch.Stop();
Console.WriteLine("Time taken by string : (0)", stopWatch.Elapsed);
StringBuilder stringBuilder= new StringBuilder(string.Empty);
//restarting stop watch for StringBuilder
stopWatch.Restart();
for (int i = 0; i < 1000; i++)
(
stringBuilder.Append(i.ToString());
)
stopWatch.Stop();
Console.WriteLine("Time taken by StringBuilder : (0)", stopWatch.Elapsed);
)
)

Ausgabe:

3. String-Operationen belegen im Vergleich zu StringBuilder mehr Speicher, da String nach jeder Operation zwischenzeitliche Garbage-Instanzen erstellt. Sehen wir uns das im folgenden Beispiel an:

Code:

using System;
using System.Text;
using System.Runtime.Serialization;
public class StringAndStringBuilder
(
public static void Main()
(
//using ObjectIDGenerator to generate ID for objects
ObjectIDGenerator idGenerator1 = new ObjectIDGenerator();
bool flag = new bool();
String str = "Sun";
Console.WriteLine("String = (0)", str);
Console.WriteLine("Instance Id : (0)", idGenerator1.GetId(str, out flag));
//flag will be True for new instance otherwise it will be False
Console.WriteLine("This instance is new : (0)\n", flag);
//concatenating strings
str += " rises";
Console.WriteLine("String = (0)", str);
Console.WriteLine("Instance Id : (0)", idGenerator1.GetId(str, out flag));
Console.WriteLine("this instance is new : (0)\n", flag);
str += " in";
Console.WriteLine("String = (0)", str);
Console.WriteLine("Instance Id : (0)", idGenerator1.GetId(str, out flag));
Console.WriteLine("this instance is new : (0)\n", flag);
str += " the";
Console.WriteLine("String = (0)", str);
Console.WriteLine("Instance Id : (0)", idGenerator1.GetId(str, out flag));
Console.WriteLine("this instance is new : (0)\n", flag);
str += " east";
Console.WriteLine("String = (0)", str);
Console.WriteLine("Instance Id : (0)", idGenerator1.GetId(str, out flag));
Console.WriteLine("this instance is new : (0)\n", flag);
//initializing string using StringBuilder
StringBuilder stringBuilder = new StringBuilder("Sun");
ObjectIDGenerator idGenerator2 = new ObjectIDGenerator();
Console.WriteLine("StringBuilder = (0)", stringBuilder);
Console.WriteLine("Instance Id : (0)", idGenerator2.GetId(stringBuilder, out flag));
Console.WriteLine("This instance is new : (0)\n", flag);
stringBuilder.Append(" rises");
Console.WriteLine("StringBuilder = (0)", stringBuilder);
Console.WriteLine("Instance Id : (0)", idGenerator2.GetId(stringBuilder, out flag));
Console.WriteLine("This instance is new : (0)\n", flag);
stringBuilder.Append(" in");
Console.WriteLine("StringBuilder = (0)", stringBuilder);
Console.WriteLine("Instance Id : (0)", idGenerator2.GetId(stringBuilder, out flag));
Console.WriteLine("This instance is new : (0)\n", flag);
stringBuilder.Append(" the");
Console.WriteLine("StringBuilder = (0)", stringBuilder);
Console.WriteLine("Instance Id : (0)", idGenerator2.GetId(stringBuilder, out flag));
Console.WriteLine("This instance is new : (0)\n", flag);
stringBuilder.Append(" east");
Console.WriteLine("StringBuilder = (0)", stringBuilder);
Console.WriteLine("Instance Id : (0)", idGenerator2.GetId(stringBuilder, out flag));
Console.WriteLine("This instance is new : (0)\n", flag);
Console.ReadKey();
)
)

Ausgabe:

Bildliche Darstellung der internen Arbeitsweise des obigen Programms:

4. String-Objekte können threadübergreifend verwendet werden, während StringBuilder-Objekte nicht threadsicher sind. Daher können zwei oder mehr Threads gleichzeitig StringBuilder-Methoden aufrufen.

5. Da String-Objekte threadsicher sind, bieten sie eine Synchronisierung, während StringBuilder keine Synchronisierung bietet.

6. String-Klasse wird verwendet, wenn der Wert des Strings im gesamten Programm konstant bleibt oder wenn nur sehr wenige Änderungen erforderlich sind, während StringBuilder verwendet wird, wenn für den String viele wiederholte Änderungen oder schwere Operationen erforderlich sind.

7. Bei einer sehr geringen Anzahl von Verkettungen arbeitet die String-Klasse im Vergleich zu StringBuilder schneller, da durch die Aufnahme von Zeichen im Puffer und die anschließende Konvertierung des gesamten Werts in einen String ein Mehraufwand entsteht. Daher arbeitet StringBuilder bei der geringen Anzahl von Verkettungen langsamer als das Verhalten der String-Klasse beim Kopieren nach Werten.

8. Um das String-Objekt in das StringBuilder-Objekt zu konvertieren, müssen wir das String-Objekt an den StringBuilder-Klassenkonstruktor übergeben, während das StringBuilder-Objekt mit der ToString () -Methode in String konvertiert werden kann.

String str = “abc”;
StringBuilder StringBuilder = new StringBuilder(str);
StringBuilder StringBuilder = new StringBuilder(“abc”);
String str = StringBuilder.ToString();

Vergleichstabelle von String vs StringBuilder

In der folgenden Tabelle sind die Vergleiche zwischen String und StringBuilder zusammengefasst :

Parameter String StringBuilder
NamespaceDie Zeichenfolgenklasse befindet sich im Systemnamespace.Die StringBuilder-Klasse befindet sich im Systemtext-Namespace.
WandlungsfähigkeitDer mit der String-Klasse erstellte String ist unveränderlich.Mit StringBuilder erstellte Zeichenfolge kann geändert werden.
PerformanceLangsam im Vergleich zu StringBuilder.Schnell im Vergleich zu String. Als wäre es schneller als String, wenn Sie mehrere Strings in einer Schleife zusammenfassen.
Thread-SicherheitThread-sicher.Nicht threadsicher.
SynchronisationBietet Synchronisation.Es bietet keine Synchronisation.
SpeichernutzungBenötigt mehr Speicher zum Erstellen einer neuen Instanz, wenn Operationen, die an Zeichenfolgen ausgeführt werden, ihren Wert ändern.Es wird weniger Speicher benötigt, da die vorhandene Instanz aktualisiert wird.
Natur des GegenstandesObject of String ist schreibgeschützt.Das Objekt von StringBuilder ist dynamischer Natur.
EffizienzDie String-Klasse ist im Vergleich zu StringBuilder weniger effizient, wenn mit einer großen Anzahl von String-Verkettungen gearbeitet wird.StringBuilder ist im Vergleich zu String effizienter, wenn Sie mit einer großen Anzahl von Zeichenfolgenverknüpfungen arbeiten.

Fazit

String erstellt nur dann eine neue Instanz, wenn sich der Wert des Strings ändert. Wenn Sie bestimmte Vorgänge für Zeichenfolgen ausführen, bei denen der Wert nicht geändert wird, wird durch Zeichenfolgen keine neue Instanz erstellt. Zwei oder mehr Zeichenfolgenliterale mit demselben Inhalt können denselben Speicherort haben.

Empfohlene Artikel

Dies ist eine Anleitung zum Hauptunterschied zwischen String und StringBuilder. Hier diskutieren wir auch die wichtigsten Unterschiede zwischen String und StringBuilder mit Infografiken und Vergleichstabelle. Sie können sich auch die folgenden Artikel ansehen, um mehr zu erfahren -

  1. Top 7 Arten von Chiffren
  2. Vorteile von StringBuilder in C #
  3. StringBuffer vs StringBuilder | Top 4 Vergleich
  4. Top Unterschiede - Jira vs Github