Sobes.tech
Junior
183

Care sunt diferențele dintre StringBuilder și StringBuffer în Java?

Răspuns de la AI

sobes.tech AI

Principala diferență este că StringBuffer este sigur pentru fire, în timp ce StringBuilder nu.

  • StringBuffer: Toate metodele sale sunt sincronizate (synchronized). Acest lucru asigură siguranța atunci când se lucrează cu mai multe fire simultan, garantând că doar un fir poate executa o metodă la un moment dat. Cu toate acestea, acest lucru duce și la scăderea performanței din cauza costurilor de sincronizare.

  • StringBuilder: Metodele nu sunt sincronizate. Acest lucru îl face mai performant decât StringBuffer în medii cu un singur fir. La utilizarea StringBuilder din mai multe fire fără sincronizare externă, pot apărea rezultate incorecte, deoarece operațiile pot fi intercalate.

Când să folosiți:

  • Folosiți StringBuilder în aplicații cu un singur fir sau când siguranța firelor este garantată la un nivel superior. Este mai rapid.
  • Folosiți StringBuffer în aplicații multi-fir, unde mai multe fire pot modifica în același timp același obiect, și aveți nevoie de siguranță încorporată.

Exemplu:

// StringBuilder într-un mediu cu un singur fir (preferabil)
StringBuilder sb = new StringBuilder();
sb.append("Hello").append(" ").append("World");
System.out.println(sb.toString()); // Va afișa "Hello World"

// StringBuffer într-un mediu multi-fir (mai sigur pentru accesul concurent)
StringBuffer sbf = new StringBuffer();
// Într-un scenariu real multi-fir, firele vor accesa sbf
sbf.append("Thread ").append(Thread.currentThread().getId());
System.out.println(sbf.toString()); // Va afișa ceva de genul "Thread 1" sau "Thread 2" în funcție de fir