Razlika između String i StringBuilder

U ovom članku String vs StringBuilder, oba predstavljaju niz znakova, prva razlika između njih je klasa String u prostoru naziva sustava dok je StringBuilder u sustavu. Prostor imena imena.

Glavna razlika je:

String se ne može mijenjati: Jednom kada stvorite instancu String-a, ne možete je promijeniti. Ako promijenite vrijednost niza, tada će se zadržati stara instanca i stvoriti će se nova instanca s novom vrijednošću u memoriji.

StringBuilder je promjenjiv : Ako promijenite vrijednost niza pomoću StringBuilder, neće stvoriti novu instancu, već će ažurirati vrijednost u postojećoj instanci.

Usporedba između String-a i StringBuilder-a (Infographics)

Ispod je 8 najboljih usporedbi Stringa i StringBuilder :

Ključne razlike između Stringa i StringBuilder

Raspravimo o nekim ključnim razlikama između Stringa i StringBuilder-a u sljedećim točkama:

1. Dok radite sa klase String, svaki put kada izvodite neke operacije na vašem nizu, iznova i iznova stvarate cijeli niz u memoriji, dok StringBuilder dodijeli neki memorijski prostor u memoriji i primijeni modifikacije u taj međuspremnik.

2. Kako je StringBuilder objekt promjenjiv, on daje bolje performanse u odnosu na String objekt kada su uključene teške string manipulacije.

Razjasnimo gornje točke pomoću primjera navedenog u nastavku:

Kodirati:

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

Izlaz:

3. String operacije koriste više memorije u odnosu na StringBuilder jer String stvara intermedijarne slučajeve smeća nakon svake operacije. Pogledajmo to u sljedećem primjeru:

Kodirati:

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

Izlaz:

Slikovni prikaz internog djelovanja gore navedenog programa:

4. String objekti mogu se koristiti u niti, dok StringBuilder objekti nisu sigurni u niti. Dakle, dvije ili više niti mogu istovremeno pozivati ​​StringBuilder metode.

5. Kako su String objekti sigurni u niti, oni omogućuju sinkronizaciju dok StringBuilder ne omogućuje sinkronizaciju.

6. Gudačka klasa koristi se kada će vrijednost niza ostati konstantna u cijelom programu ili kada je u njemu potrebno vrlo malo modifikacija, dok se StringBuilder koristi kada je za ponavljanje modifikacija ili teških operacija potrebno izvoditi niz.

7. Za vrlo manji broj kontakata, klasa String radi brže u usporedbi sa StringBuilder-om jer smještavanje znakova u međuspremnik, a zatim ponovno pretvaranje cijele vrijednosti u niz, stvara nadzemne troškove. Prema tome, za mali broj kontakata, StringBuilder djeluje sporije u odnosu na ponašanje kopiranja po vrijednosti klase String.

8. Da bismo String objekt pretvorili u StringBuilder objekt, moramo ga proslijediti konstruktoru klase StringBuilder, dok se StringBuilder objekt može pretvoriti u String koristeći ToString () metodu.

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

Tabela za usporedbu žice i StringBuilder

Donja tablica sažima usporedbe između Stringa i StringBuilder :

Parametar Niz StringBuilder
ProstorKlasa niza nalazi se u prostoru naziva sustava.Klasa StringBuilder nalazi se u prostoru naziva teksta teksta.
promjenljivostString stvoren pomoću klase String je nepromjenjiv.String stvoren pomoću StringBuilder je mutibilan.
IzvođenjeSporo u odnosu na StringBuilder.Brzo u odnosu na Gudački. Kao da je brži od Stringa dok istovremeno povezuje mnogo struna u petlju.
Sigurnost navojaTema-sigurno.Nije siguran.
SinkronizacijaPruža sinkronizaciju.Ne omogućuje sinkronizaciju.
Upotreba memorijeZa stvaranje nove instance treba više memorije ako operacije izvedene na nizu promijene svoju vrijednost.Potrebno joj je manje memorije jer ažurira postojeću instancu.
Priroda objektaPredmet niza je u prirodi samo za čitanje.Objekt StringBuilder je po prirodi dinamičan.
efikasnostGudačka klasa je manje učinkovita u usporedbi sa StringBuilder-om dok radite s velikim brojem spojeva niza.StringBuilder je učinkovitiji u usporedbi sa Stringom dok radite s velikim brojem nizova veza.

Zaključak

String stvara novu instancu samo kada se vrijednost niza promijeni. Ako izvodite određene radnje na nizu koji ne mijenja njegovu vrijednost, tada neće biti nikakvog stvaranja nove instance pomoću stringa. Dva ili više doslovnih niza s istim sadržajem mogu imati isto mjesto u memoriji.

Preporučeni članci

Ovo je vodič za glavnu razliku između Stringa i StringBuilder-a. Ovdje također raspravljamo o ključnim razlikama String vs StringBuilder s infografikom i tablicom usporedbe. Možete također pogledati sljedeće članke da biste saznali više -

  1. Top 7 vrsta šifre
  2. Prednosti StringBuilder u C #
  3. StringBuffer vs StringBuilder | 4 najbolje usporedbe
  4. Najbolje razlike - Jira vs Github

Kategorija: