Разлика између Стринга и СтрингБуилдер

У овом чланку Стринг вс СтрингБуилдер, оба представљају низ знакова, прва разлика између њих је класа Стринг у простору имена система док је СтрингБуилдер у систему. Текст имена простора.

Главна разлика је:

Стринг је неизменљив : Једном када створите инстанцу Стринг-а, не можете је променити. Ако промените вредност низа, то ће задржати стару инстанцу и створиће нову инстанцу са новом вредности у меморији.

СтрингБуилдер је променљив : Ако промените вредност низа користећи СтрингБуилдер, неће створити нову инстанцу, већ ће ажурирати вредност у постојећој инстанци.

Упоредна статистика између Стринг-а и СтрингБуилдер-а (Инфограпхицс)

Испод је 8 најбољих поређења Стринг-а и СтрингБуилдер-а :

Кључне разлике између Стринга и СтрингБуилдер-а

Расправимо о неким кључним разликама између Стринга и СтрингБуилдер-а у следећим тачкама:

1. Док радите са класе Стринг, сваки пут када изводите неке операције на вашем низу, изнова и изнова стварате цео низ у меморији, док СтрингБуилдер додељује неки меморијски простор у меморији и примењује модификације у том међуспремнику.

2. Пошто је СтрингБуилдер објект покретљив, он пружа боље перформансе у поређењу са Стринг објектом када су укључене тешке стринговске манипулације.

Да разумемо горње тачке уз помоћ следећег примера:

Шифра:

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

Излаз:

3. Стринг операције користе више меморије у поређењу са СтрингБуилдер-ом, јер Стринг ствара пролазне примере смећа након сваке операције. Да видимо ово на следећем примеру:

Шифра:

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

Излаз:

Сликовни приказ унутрашњег рада горе наведеног програма:

4. Стринг објекти могу се користити преко нити, док СтрингБуилдер објекти нису сигурни на нит. Дакле, две или више нити могу истовремено позивати СтрингБуилдер методе.

5. Како су Стринг објекти сигурни у нит, они омогућавају синхронизацију док СтрингБуилдер не омогућава синхронизацију.

6. Гудачка класа се користи када ће вриједност низа остати константна у читавом програму или када је потребно мање измјена на њему, док се СтрингБуилдер користи када је потребно да се на низу изводе многе поновљене модификације или тешке операције.

7. За врло мањи број контаката, класа Стринг ради брже у поређењу са СтрингБуилдер-ом јер смештање знакова у међуспремник, а затим поново претварање целе вредности у низ, ствара надземне трошкове. Стога, за мали број конкатенација, СтрингБуилдер дјелује спорије у односу на понашање копирања по вриједности Стринг класе.

8. Да бисмо Стринг објект претворили у СтрингБуилдер објект, морамо га прослиједити конструктору класе СтрингБуилдер, док се СтрингБуилдер објект може претворити у Стринг користећи ТоСтринг () методу.

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

Табела поређења струне и СтрингБуилдер

Табела у наставку резимира поређења између Стринг-а и СтрингБуилдер-а :

Параметар Низ СтрингБуилдер
Простор именаКласа низа се налази у системском називу система.Класа СтрингБуилдер налази се у системском простору имена текста.
ПроменљивостСтринг креиран помоћу класе Стринг је непроменљив.Стринг креиран помоћу СтрингБуилдер-а је изменљив.
ПерформансеСпоро у поређењу са СтрингБуилдер-ом.Брз у поређењу са Стрингом. Као да је бржи од Стринга док истовремено повезује много струна у петљу.
Безбедност навојаПотокобезопасними.Није безбедно за навоје.
СинхронизацијаОмогућава синхронизацију.Не омогућава синхронизацију.
Употреба меморијеПотребно је више меморије за креирање нове инстанце ако операције изведене на низу промијене своју вриједност.Потребно јој је мање меморије јер ажурира постојећу инстанцу.
Природа објектаПредмет стринга је у природи само за читање.Објект СтрингБуилдер је по природи динамичан.
ЕфикасностКласа струна је мање ефикасна у поређењу са СтрингБуилдер-ом, док се ради са великим бројем спојних низова.СтрингБуилдер је ефикаснији у поређењу са Стринг током рада са великим бројем низова.

Закључак

Стринг ствара нову инстанцу само када се вредност низа промени. Ако изводите одређене операције на стрингу који не мења његову вредност, тада неће бити никаквог стварања нове инстанце помоћу Стринга. Два или више стрингова с истим садржајем могу имати исту меморијску локацију.

Препоручени чланци

Ово је водич за главну разлику између Стринг-а и СтрингБуилдер-а. Овде такође разматрамо кључне разлике између Стринг-а и СтрингБуилдер-а са табелама инфографике и поређења. Можда ћете такође погледати следеће чланке да бисте сазнали више -

  1. Топ 7 типова шифри
  2. Предности СтрингБуилдер-а у Ц #
  3. СтрингБуффер вс СтрингБуилдер | Топ 4 поређење
  4. Најбоље разлике - Јира вс Гитхуб

Категорија: