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"՝ կախված թելից