Diferența dintre String și StringBuilder

În acest articol String vs StringBuilder, ambele reprezintă succesiunea caracterelor, prima diferență între ele este clasa String în spațiul de nume System, în timp ce StringBuilder este în System. Spațiu de nume text.

Diferența majoră este:

String este imuabil : după ce creați o instanță a șirului, nu o puteți schimba. Dacă schimbați valoarea șirului, atunci aceasta va păstra vechea instanță și va crea o nouă instanță cu o nouă valoare în memorie.

StringBuilder este mutabil : dacă schimbați valoarea șirului folosind StringBuilder, nu va crea o nouă instanță, ci va actualiza valoarea în instanța existentă.

Comparație Față-Față între String și StringBuilder (Infografie)

Mai jos se află primele 8 comparații între String și StringBuilder :

Diferențe cheie între String și StringBuilder

Haideți să discutăm câteva diferențe cheie între String și StringBuilder în următoarele puncte:

1. În timp ce lucrați cu clasa String, de fiecare dată când efectuați unele operații pe șirul dvs., recreați întreaga șir în memorie din nou și din nou, în timp ce StringBuilder alocă ceva spațiu tampon în memorie și aplică modificări în spațiul tampon.

2. Întrucât obiectul StringBuilder este mutabil, oferă performanțe mai bune în comparație cu obiectul String atunci când sunt implicate manipulări cu șiruri grele.

Să înțelegem punctele de mai sus cu ajutorul unui exemplu dat mai jos:

Cod:

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

ieşire:

3. Operațiile cu șiruri utilizează mai multă memorie în comparație cu StringBuilder, deoarece String creează instanțe intermediare de gunoi după fiecare operațiune. Să vedem acest lucru în exemplul de mai jos:

Cod:

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

ieşire:

Reprezentare picturală a funcționării interne a programului de mai sus:

4. Obiectele cu șiruri pot fi utilizate pe filete, în timp ce obiectele StringBuilder nu sunt în siguranță. Astfel, două sau mai multe fire pot apela simultan metode StringBuilder.

5. Întrucât obiectele String sunt sigure, acestea oferă sincronizare, în timp ce StringBuilder nu oferă sincronizare.

6. Clasa de șiruri este utilizată atunci când valoarea șirului va rămâne constantă pe tot parcursul programului sau atunci când sunt foarte puține modificări necesare pentru acesta, în timp ce StringBuilder este utilizat atunci când multe modificări repetate sau operații grele sunt necesare pentru a efectua șirul.

7. Pentru un număr foarte mic de concatenări, clasa String funcționează mai rapid în comparație cu StringBuilder, deoarece acomodarea caracterelor în spațiul tampon și apoi transformarea întregii valori în șir, creează din nou. Astfel, pentru numărul mic de concatenări, StringBuilder funcționează mai lent în comparație cu comportamentul de copiere după valoare al clasei String.

8. Pentru a converti obiectul String în obiectul StringBuilder, trebuie să trecem obiectul String la constructorul clasei StringBuilder, în timp ce obiectul StringBuilder poate fi convertit în String folosind metoda ToString ().

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

Tabelul de comparație al șirului cu StringBuilder

Tabelul de mai jos rezumă comparațiile dintre String și StringBuilder :

Parametru Şir StringBuilder
namespaceClasa de șiruri se află în spațiul de nume al sistemului.Clasa StringBuilder se află în spațiul de nume System Text.
MutabilitateStringul creat cu clasa String este imuabil.Stringul creat cu StringBuilder este mutabil.
PerformanţăLent comparativ cu StringBuilder.Rapid în comparație cu șirul. De parcă este mai rapid decât String în timp ce concatenează multe șiruri împreună într-o buclă.
Securitatea filetelorFir de siguranta.Nu este sigur de fire.
SincronizareOferă sincronizarea.Nu oferă sincronizare.
Folosirea memorieiNecesită mai multă memorie pentru a crea o nouă instanță dacă operațiile efectuate pe șir își modifică valoarea.Necesită mai puțină memorie, deoarece actualizează instanța existentă.
Natura obiectuluiObiectul șirului este numai în natură.Obiectul StringBuilder este de natură dinamică.
EficienţăClasa de șiruri este mai puțin eficientă în comparație cu StringBuilder în timp ce lucrează cu un număr mare de concatenări cu șiruri.StringBuilder este mai eficient în comparație cu String în timp ce lucrează cu un număr mare de concatenări cu șiruri.

Concluzie

String creează o nouă instanță numai atunci când se modifică valoarea șirului. Dacă efectuați anumite operațiuni pe șir care nu își schimbă valoarea, atunci nu va exista nicio creare de instanță nouă prin String. Două sau mai multe literale cu șiruri cu același conținut pot avea aceeași locație de memorie.

Articole recomandate

Acesta este un ghid pentru diferența maximă dintre String și StringBuilder. Aici vom discuta, de asemenea, despre diferențele cheie String vs StringBuilder cu infografie și tabelul de comparație. De asemenea, puteți arunca o privire la următoarele articole pentru a afla mai multe -

  1. Top 7 tipuri de cifre
  2. Avantajele StringBuilder în C #
  3. StringBuffer vs StringBuilder | Top 4 Comparație
  4. Diferențe de top - Jira vs Github