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 muhitdaStringBufferga qaraganda tezroq qiladi. Bir nechta oqimlarStringBuilderdan tashqi sinxronlashtirishsiz foydalanayotgan bo'lsa, noto'g'ri natijalar yuzaga kelishi mumkin, chunki operatsiyalar aralashtirilishi mumkin.
Qachon foydalanish:
StringBuilderni bitta oqimli dasturlarda yoki yuqori darajadagi oqim xavfsizligi ta'minlangan hollarda foydalaning. U tezroq.StringBufferni 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