Skillnaden mellan String vs StringBuilder

I den här artikeln String vs StringBuilder, båda representerar sekvensen med tecken, den första skillnaden mellan dem är String-klassen är i systemnamnområdet medan StringBuilder finns i System. Textens namnutrymme.

Den största skillnaden är:

String är oföränderlig : När du skapar en instans av String kan du inte ändra den. Om du ändrar strängens värde behåller detta den gamla instansen och skapar en ny instans med nytt värde i minnet.

StringBuilder är mutable : Om du ändrar strängens värde med StringBuilder skapar den inte en ny instans istället kommer den att uppdatera värdet i den befintliga instansen.

Head to Head Jämförelse mellan String vs StringBuilder (Infographics)

Nedan visas de 8 bästa jämförelserna mellan String och StringBuilder :

Viktiga skillnader mellan String vs StringBuilder

Låt oss diskutera några viktiga skillnader mellan String vs StringBuilder i följande punkter:

1. När du arbetar med String-klassen, skapar du hela strängen i minnet om och om igen medan du utför vissa operationer på strängen medan StringBuilder allokerar lite buffertutrymme i minnet och tillämpar ändringar i det buffertutrymmet.

2. Eftersom StringBuilder-objekt är muterbara ger det bättre prestanda jämfört med String-objekt när tunga strängmanipulationer är involverade.

Låt oss förstå ovanstående punkter med hjälp av ett exempel nedan:

Koda:

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

Produktion:

3. Strängoperationer använder mer minne jämfört med StringBuilder eftersom String skapar mellanliggande skräpstillfällen efter varje operation. Låt oss se detta i exemplet nedan:

Koda:

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

Produktion:

Bildrepresentation av det interna arbetet med ovanstående program:

4. Strängobjekt kan användas över trådar medan StringBuilder-objekt inte är trådsäkra. Således kan två eller flera trådar anropa StringBuilder-metoder samtidigt.

5. Eftersom strängobjekt är tråd-säkra, tillhandahåller de synkronisering medan StringBuilder inte tillhandahåller synkronisering.

6. Stringklass används när värdet på strängen kommer att förbli konstant under hela programmet eller när det krävs mycket färre modifieringar på det medan StringBuilder används när många upprepade modifikationer eller tunga operationer krävs för att utföra på strängen.

7. För ett mycket mindre antal sammanlänkningar fungerar String-klassen snabbare jämfört med StringBuilder eftersom att inrymme för tecken i buffertutrymme och sedan konvertera hela värdet till sträng igen skapar omkostnader. För det lilla antalet sammanlänkningar fungerar således StringBuilder långsammare jämfört med kopieringsbeteende-beteendet i String-klassen.

8. För att konvertera String-objektet till StringBuilder-objektet måste vi överföra String-objektet till StringBuilder-klasskonstruktorn medan StringBuilder-objektet kan konverteras till String med hjälp av ToString () -metoden.

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

Jämförelsetabell över String vs StringBuilder

Tabellen nedan sammanfattar jämförelserna mellan String vs StringBuilder :

Parameter Sträng String
namespaceSträngklassen finns i systemnamnområdet.StringBuilder-klassen finns i systemtextens namnutrymme.
FöränderlighetSträng skapad med String klass är oföränderlig.Sträng skapad med StringBuilder är mutabel.
PrestandaLångsam jämfört med StringBuilder.Snabbt jämfört med String. Som om det är snabbare än String medan du sammanlänker många strängar i en slinga.
GängsäkerhetTrådsäker.Inte trådsäker.
SynkroniseringGer synkronisering.Det tillhandahåller inte synkronisering.
MinnesanvändningKräver mer minne för att skapa en ny instans om operationer som utförs i strängen ändrar dess värde.Det kräver mindre minne eftersom det uppdaterar existerande instans.
Objektets naturObjektet med strängen är skrivskyddad i naturen.Objektet med StringBuilder är dynamiskt.
EffektivitetStringklass är mindre effektiv jämfört med StringBuilder när du arbetar med ett stort antal strängkoncentrationer.StringBuilder är mer effektiv jämfört med String medan du arbetar med ett stort antal strängkopplingar.

Slutsats

Sträng skapar ny instans endast när värdet på strängen ändras. Om du utför vissa operationer på strängen som inte ändrar dess värde kommer det inte att skapas någon ny instans av String. Två eller flera strängbokstäver med samma innehåll kan ha samma minnesplats.

Rekommenderade artiklar

Detta är en guide till den bästa skillnaden mellan String vs StringBuilder. Här diskuterar vi också de viktigaste skillnaderna String vs StringBuilder med infografik och jämförelsetabell. Du kan också titta på följande artiklar för att lära dig mer -

  1. Topp 7 typer av chiffer
  2. Fördelar med StringBuilder i C #
  3. StringBuffer vs StringBuilder | Topp 4 jämförelse
  4. Toppskillnader - Jira vs Github

Kategori: