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" деп чыгышы мүмкүн, иштөөчүгө карап