Sobes.tech
Junior

Javaда StringBuilder жана StringBuffer ортосунда кандай айырмачылыктар бар?

sobes.tech AI

AIден жооп

Негизги айырмасы — StringBuffer көп иштөөчүгө коопсуз, ал эми StringBuilder — эмес.

  • StringBuffer: Анын бардык ыкмалары синхрондоштурулган (synchronized). Бул көп иштөөчү менен иштөөдө коопсуздукту камсыздайт жана бир убакта бир гана иштөөчү ыкманы аткара алат. Бирок, бул синхрондоштуруу чыгымдарына байланыштуу иштөө ылдамдыгын төмөндөтөт.

  • StringBuilder: Ыкмалары синхрондоштурулбаган. Бул аны бир иштөөчү чөйрөдө StringBufferга караганда тезирек кылат. Көп иштөөчү StringBuilder колдонуп жатканда жана тышкы синхрондоштуруу жок болсо, туура эмес натыйжалар пайда болушу мүмкүн, анткени операциялар аралашып кетиши мүмкүн.

Кайсы учурда колдонуу керек:

  • Бир иштөөчү колдонмолордо же иштөөчү коопсуздугу жогору деңгээлде камсыздалган учурда StringBuilder колдонуу керек. Ал тезирек.
  • Көп иштөөчү колдонмолордо, анда бир нече иштөөчү бир убакта бир объектти өзгөртүп жатса жана ички иштөөчү коопсуздук керек болсо, StringBuffer колдонуу керек.

Мисал:

// Бир иштөөчү чөйрөдө `StringBuilder` (жөндүү)
StringBuilder sb = new StringBuilder();
sb.append("Салам").append(" ").append("Дүйнө");
System.out.println(sb.toString()); // "Салам Дүйнө" чыгарат

// Көп иштөөчү чөйрөдө `StringBuffer` (коопсузураак)
StringBuffer sbf = new StringBuffer();
// Чын көп иштөөчү сценарийде, иштөөчүлөр sbfге киришет
sbf.append("Жип ").append(Thread.currentThread().getId());
System.out.println(sbf.toString()); // "Жип 1" же "Жип 2" деп чыгышы мүмкүн, иштөөчүгө карап