StringBuffer vs. StringBuilder: Diferența dintre StringBuffer și StringBuilder

Publicat: 2020-10-20

Când programați în Java, șirurile de caractere sunt una dintre cele mai utilizate clase. Un șir este un obiect care este utilizat atunci când doriți să reprezentați o secvență de caractere. Au mai multe proprietăți, iar una dintre ele este imuabilitatea, ceea ce înseamnă că nu pot fi modificate. Pentru a rezolva acest lucru, au fost introduse în Java String Buffers și String Builders. Folosind aceste clase, modificările pot fi făcute din nou și din nou.

În acest articol, vom parcurge ambele clase și vom discuta despre diferențele dintre ele. Înainte de a intra în cursuri, ne vom familiariza cu conceptul de șiruri în Java.

Cuprins

Șiruri în Java

Șirurile sunt folosite în Java pentru a stoca o secvență de valori de caractere. Ele sunt tratate ca obiecte în limbajul de programare Java. Avem diverse opțiuni pentru a crea și a manipula șiruri.

Pentru a crea un șir, sintaxa de bază este următoarea:

Propoziție șir = „Bună, lume!”;

Șirurile au unele proprietăți, iar una dintre ele este că sunt imuabile, ceea ce înseamnă că nu pot fi modificate. Dar dacă doriți un șir care poate fi modificat. Pentru a face acest lucru, sunt utilizate modificări Java numite String Buffers și String Builders. Acum că am înțeles ce sunt șirurile, vom continua cu comparația noastră.

Trebuie citit: Idei și subiecte de proiecte Java

Învață cursuri de software online de la cele mai bune universități din lume. Câștigă programe Executive PG, programe avansate de certificat sau programe de master pentru a-ți accelera cariera.

StringBuffer

String Buffer este o modificare de clasă folosită în Java pentru a adăuga mai multă funcționalitate șirurilor, oferind caracteristici precum mutabilitatea. Putem folosi metode precum append(), insert(), reverse(), replace(), etc. pentru a modifica șirurile. StringBuffer are patru constructori definiți; sunt după cum urmează:

  • StringBuffer(): Aceasta creează un buffer de șir gol, fără caracteristici, cu o capacitate de 16 caractere.
  • StringBuffer(CharSequence chars ): creează un StringBuffer care conține aceleași caractere ca și CharSequence specificat.
  • StringBuffer(int size): Aceasta construiește un StringBuffer fără caractere cu o capacitate inițială specificată.
  • StringBuffer(String str ): creează un obiect StringBuffer cu un șir specificat inițial.

Să discutăm câteva dintre diferitele metode pe care le putem folosi în StringBuffer pentru a modifica un anumit șir:

  • Lungime () și capacitate(): Lungimea curentă a unui StringBuffer poate fi găsită cu ajutorul metodei length() în timp ce pentru a găsi capacitatea totală, folosim metoda capacității().
  • append(): Metoda append() este folosită pentru a concatena șirul cu alte tipuri de date sau similare. Putem adăuga șiruri, numere și obiecte la un șir folosind această metodă.
  • Insert (): Această metodă este folosită pentru a introduce un șir într-un alt șir.
  • charAt(): Această metodă este folosită pentru a găsi valoarea unui singur caracter într-un StringBuffer.

Putem vedea cum putem folosi StringBuffer pentru a modifica șirurile în funcție de nevoile noastre. Deci, de ce folosim StringBuilder când putem obține o astfel de funcționalitate cu StringBuffer?

Aflați: Top 20 de idei și subiecte de proiecte Android la modă pentru începători

StringBuilder

StringBuilder în Java este o secvență de caractere mutabile. StringBuilder oferă o clasă alternativă pentru a crea șiruri care pot fi modificate, deoarece știm că șirurile sunt imuabile. Este foarte asemănător cu StringBuffer , dar unde diferă aceste două este în sincronizare. StringBuilder nu este sincronizat, ceea ce înseamnă că nu este sigur pentru fire. StringBuilder are, de asemenea, patru constructori definiți; sunt după cum urmează:

  • StringBuilder(): creează un StringBuilder gol cu ​​o cameră pentru 16 caractere.
  • StringBuilder(int size): face un șir gol cu ​​o dimensiune specificată.
  • StringBuilder(CharSequence seq): creează un StringBuilder care conține aceleași caractere ca și CharSequence specificat.
  • StringBuilder(String str ): creează un obiect String Builder cu un șir str specificat inițial.

Să discutăm câteva dintre metodele pe care le putem folosi pe StringBuilders:

  • append(): Această metodă este folosită atunci când doriți să adăugați ceva la șir, indiferent dacă este un șir, un număr sau un obiect.
  • Înlocuiți (): Dacă aveți de gând să înlocuiți un șir de caractere dintr-un alt set de caractere, puteți utiliza metoda înlocuire().
  • Substring (): Dacă aveți de gând să obțineți o porțiune dintr-un șir, o puteți obține folosind metoda substring().

Deci, după cum putem vedea, StringBuffer și StringBuilder par a fi la fel. Chiar dacă au funcționalități similare, sunt destul de diferite și s-ar putea să-ți folosești mai bine unul decât celălalt în multe cazuri.

Diferențele dintre cele două clase

Sincronizare

În mod implicit, StringBuffer este sincronizat, în timp ce StringBuilder nu are nicio sincronizare. În cazurile în care șirul trebuie accesat de mai multe fire și nu se aplică nicio sincronizare externă, trebuie să utilizați StringBuffer și nu StringBuilder.

Fir de siguranta

StringBuilder nu este o clasă sigură pentru fire, în timp ce StringBuffer are această caracteristică; acest lucru se datorează faptului că StringBuffer este sincronizat.

Viteză

Datorită celor două caracteristici de mai sus, StringBuffer este mai lent în comparație cu StringBuilder. Deci, dacă doriți să aveți performanțe mai rapide și nu aveți nevoie de caracteristicile de mai sus, viteza și eficiența StringBuilder îl fac o alegere mai bună.

StringBuilder wad a fost introdus în Java 1.5 prin analiza deficiențelor StringBuffer și are suficiente modificări care îl fac viabil de utilizat în anumite situații în care primul ar putea afecta performanța.

Performanță și consum de memorie

După cum putem învăța din punctele de mai sus, StringBuilder este mai rapid când vine vorba de performanță, comparativ cu StringBuffer. Consumul de memorie între cele două este, de asemenea, diferit în cazul în care StringBuffer consumă mai multă memorie în comparație cu acesta din urmă.

Citește și: Top 130+ întrebări și răspunsuri la interviu Java

Încheierea

Chiar dacă StringBuilder este clasificat ca o alternativă la clasa șir, cum ar fi StringBuffer, dar este mult mai flexibil când vine vorba de utilizare.

Deci, după cum puteți vedea că, dacă doriți să modificați șirurile care sunt implicit un set imuabil de caractere, trebuie să utilizați clasele StringBuffer sau StringBuilder, deoarece acestea oferă posibilitatea de a schimba șirurile. Ambele clase sunt similare la suprafață, după cum puteți vedea, folosesc aceleași metode și constructori similari.

Diferența dintre cele două se reduce la sincronizare și threading. Dacă lucrați într-un mediu în care nu vă pasă de siguranța firelor, puteți utiliza StringBuilder, deoarece va fi mult mai rapid și eficient, dar dacă aveți nevoie de siguranță a firelor, ar trebui să utilizați StringBuffer deoarece este sincronizat și thread- sigur.

Dacă sunteți interesat să aflați mai multe despre Java, dezvoltarea de software full-stack, consultați programul Executive PG în dezvoltare software de la upGrad și IIIT-B – Specializare în securitate cibernetică, care este conceput pentru profesioniști care lucrează și oferă peste 500 de ore de pregătire riguroasă, Peste 9 proiecte și sarcini, statutul de absolvenți IIIT-B, proiecte practice practice și asistență pentru locuri de muncă cu firme de top.

Aterizează la locul de muncă visat

Aplicați pentru Master of Science în Informatică