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