Sobes.tech
Junior

Java'da StringBuilder va StringBuffer o'rtasidagi farqlar nima?

sobes.tech AI

AIdan javob

Asosiy farq shundaki, StringBuffer oqimli xavfsiz, StringBuilder esa emas.

  • StringBuffer: Uning barcha metodlari sinxronlashtirilgan (synchronized). Bu ko'p oqimli muhitda xavfsizlikni ta'minlaydi va faqat bitta oqim bir vaqtning o'zida metodni bajarishi mumkinligini kafolatlaydi. Biroq, bu sinxronlashtirish xarajatlari tufayli ishlash tezligini pasaytiradi.

  • StringBuilder: Metodlar sinxronlashtirilmagan. Bu uni bitta oqimli muhitda StringBuffer ga qaraganda tezroq qiladi. Bir nechta oqimlar StringBuilder dan tashqi sinxronlashtirishsiz foydalanayotgan bo'lsa, noto'g'ri natijalar yuzaga kelishi mumkin, chunki operatsiyalar aralashtirilishi mumkin.

Qachon foydalanish:

  • StringBuilder ni bitta oqimli dasturlarda yoki yuqori darajadagi oqim xavfsizligi ta'minlangan hollarda foydalaning. U tezroq.
  • StringBuffer ni ko'p oqimli dasturlarda, bir nechta oqim bir vaqtning o'zida bir xil ob'ektni o'zgartirishi mumkin bo'lgan hollarda va ichki oqim xavfsizligiga ehtiyoj bo'lsa, foydalaning.

Misol:

// Bitta oqimli muhitda `StringBuilder` (afzal)
StringBuilder sb = new StringBuilder();
sb.append("Hello").append(" ").append("World");
System.out.println(sb.toString()); // "Hello World" ni chiqaradi

// Ko'p oqimli muhitda `StringBuffer` (xavfsizroq)
StringBuffer sbf = new StringBuffer();
// Haqiqiy ko'p oqimli holatda, oqimlar sbf ga murojaat qiladi
sbf.append("Thread ").append(Thread.currentThread().getId());
System.out.println(sbf.toString()); // "Thread 1" yoki "Thread 2" kabi ko'rsatadi, oqimga bog'liq