Verschil tussen String versus StringBuilder

In dit artikel vertegenwoordigen String versus StringBuilder beide de reeks tekens, het eerste verschil tussen beide is dat de klasse String zich in de systeemnaamruimte bevindt, terwijl StringBuilder zich in het systeem bevindt. Tekstnaamruimte.

Het grote verschil is:

String is onveranderlijk : als u eenmaal een instantie van String hebt gemaakt, kunt u deze niet meer wijzigen. Als u de waarde van de tekenreeks wijzigt, blijft de oude instantie behouden en wordt een nieuwe instantie met een nieuwe waarde in het geheugen gemaakt.

StringBuilder is veranderlijk: als u de waarde van de tekenreeks wijzigt met StringBuilder, wordt er geen nieuwe instantie gemaakt, maar wordt de waarde in de bestaande instantie bijgewerkt.

Head to Head-vergelijking tussen String vs StringBuilder (Infographics)

Hieronder staan ​​de top 8 vergelijkingen tussen String en StringBuilder :

Belangrijkste verschillen tussen String versus StringBuilder

Laten we enkele belangrijke verschillen tussen String versus StringBuilder op de volgende punten bespreken:

1. Terwijl u met String-klasse werkt, maakt u elke keer dat u enkele bewerkingen op uw string uitvoert, de hele string in het geheugen steeds opnieuw, terwijl StringBuilder wat bufferruimte in het geheugen toewijst en wijzigingen in die bufferruimte aanbrengt.

2. Aangezien het StringBuilder-object kan worden gewijzigd, biedt het betere prestaties in vergelijking met het String-object wanneer zware stringmanipulaties zijn betrokken.

Laten we de bovenstaande punten begrijpen met behulp van een hieronder gegeven voorbeeld:

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);
)
)

Output:

3. Stringbewerkingen gebruiken meer geheugen in vergelijking met StringBuilder omdat String na elke bewerking tussenliggende rommelinstanties maakt. Laten we dit in het onderstaande voorbeeld bekijken:

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();
)
)

Output:

Geïllustreerde weergave van de interne werking van het bovengenoemde programma:

4. String-objecten kunnen over threads worden gebruikt, terwijl StringBuilder-objecten niet thread-safe zijn. Zo kunnen twee of meer threads tegelijkertijd StringBuilder-methoden aanroepen.

5. Aangezien String-objecten thread-safe zijn, bieden ze synchronisatie, terwijl StringBuilder geen synchronisatie biedt.

6. String-klasse wordt gebruikt wanneer de waarde van de string constant blijft in het programma of wanneer er minder wijzigingen nodig zijn, terwijl StringBuilder wordt gebruikt wanneer veel herhaalde wijzigingen of zware bewerkingen nodig zijn om de string uit te voeren.

7. Voor een minder aantal aaneenschakelingen werkt de String-klasse sneller in vergelijking met StringBuilder, omdat het opnemen van tekens in de bufferruimte en het vervolgens opnieuw converteren van de gehele waarde naar string, overhead oplevert. Voor het kleine aantal aaneenschakelingen werkt StringBuilder dus langzamer in vergelijking met het gedrag van de klasse String op waarde.

8. Om het String-object naar het StringBuilder-object te converteren, moeten we het String-object aan de klasseconstructor StringBuilder doorgeven, terwijl het StringBuilder-object met de methode ToString () naar String kan worden geconverteerd.

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

Vergelijkingstabel van String versus StringBuilder

De onderstaande tabel geeft een overzicht van de vergelijkingen tussen String vs StringBuilder :

Parameter Draad StringBuilder
namespaceDe tekenreeksklasse bevindt zich in de systeemnaamruimte.De klasse StringBuilder bevindt zich in de naamruimte Systeemtekst.
veranderlijkheidString gemaakt met behulp van String klasse is onveranderlijk.String gemaakt met StringBuilder kan worden gewijzigd.
PrestatieLangzaam in vergelijking met StringBuilder.Snel in vergelijking met String. Alsof het sneller is dan String terwijl het veel strings samenvoegt in een lus.
DraadveiligheidThread-safe.Niet draadveilig.
SynchronisatieBiedt synchronisatie.Het biedt geen synchronisatie.
GeheugengebruikVereist meer geheugen om een ​​nieuwe instantie te maken als bewerkingen die op een string worden uitgevoerd de waarde ervan wijzigen.Het vereist minder geheugen omdat het de bestaande instantie bijwerkt.
Aard van het objectObject of String is van nature alleen-lezen.Object van StringBuilder is dynamisch van aard.
rendementStringklasse is minder efficiënt in vergelijking met StringBuilder tijdens het werken met een groot aantal stringconcatenaties.StringBuilder is efficiënter in vergelijking met String tijdens het werken met een groot aantal tekenreeksen.

Conclusie

String maakt alleen een nieuwe instantie wanneer de waarde van de string verandert. Als u bepaalde bewerkingen uitvoert op tekenreeks die de waarde ervan niet wijzigt, wordt er geen nieuwe instantie gemaakt door String. Twee of meer stringliterals met dezelfde inhoud kunnen dezelfde geheugenlocatie hebben.

Aanbevolen artikelen

Dit is een gids voor het grootste verschil tussen String versus StringBuilder. Hier bespreken we ook de belangrijkste verschillen tussen String en StringBuilder met infographics en vergelijkingstabel. U kunt ook de volgende artikelen bekijken voor meer informatie -

  1. Top 7 soorten codering
  2. Voordelen van StringBuilder in C #
  3. StringBuffer vs StringBuilder | Top 4 vergelijking
  4. Topverschillen - Jira vs Github