Sobes.tech
Junior

Kāda ir atšķirība starp StringBuilder un StringBuffer Java?

sobes.tech AI

Atbilde no AI

Galvenā atšķirība ir tā, ka StringBuffer ir thread-safe, bet StringBuilder nav.

  • StringBuffer: Visas tā metodes ir sinhronizētas (synchronized). Tas nodrošina drošību, strādājot ar vairākiem pavedieniem vienlaikus, garantējot, ka tikai viens pavediens var izpildīt metodi vienlaikus. Tomēr tas arī samazina veiktspēju, radot sinhronizācijas papildu slodzi.

  • StringBuilder: Metodes nav sinhronizētas. Tas padara to efektīvāku nekā StringBuffer vienpavedienu vidē. Izmantojot StringBuilder vairākos pavedienos bez ārējas sinhronizācijas, var rasties nepareizi rezultāti, jo operācijas var tikt interleaved (savstarpēji sajauktas).

Kad lietot:

  • Lietojiet StringBuilder vienpavedienu lietojumprogrammās vai tad, kad drošība ir nodrošināta augstākā līmenī. Tas ir ātrāks.
  • Lietojiet StringBuffer daudzpavedienu lietojumprogrammās, kur vairāk nekā viens pavediens var vienlaikus modificēt vienu un to pašu objektu, un jums ir nepieciešama iebūvēta thread safety.

Piemērs:

// StringBuilder vienpavedienu vidē (ieteicams)
StringBuilder sb = new StringBuilder();
sb.append("Hello").append(" ").append("World");
System.out.println(sb.toString()); // Izvadīs "Hello World"

// StringBuffer daudzpavedienu vidē (drošāk ar vienlaicīgu piekļuvi)
StringBuffer sbf = new StringBuffer();
// Reāla daudzpavedienu scenārijā pavedieni piekļūs sbf
sbf.append("Thread ").append(Thread.currentThread().getId());
System.out.println(sbf.toString()); // Izvadīs kaut ko līdzīgu "Thread 1" vai "Thread 2" un tā tālāk, atkarībā no pavediena