Free tutorials & notes in Hindi & English · Clean code examples 🧰 मुफ़्त PDF और फ़ोटो टूल्स →
📘 Lesson  ·  Lesson 38

String vs StringBuffer vs StringBuilder

Text रखने के तीन तरीके

Java में text के तीन classes हैं: String, StringBuilder और StringBuffer। ये इसमें अलग हैं कि बदल सकते हैं या नहीं (mutability), कितने तेज़ हैं, और thread-safe हैं या नहीं। जब आप बहुत text बनाएँ या edit करें तब सही चुनना मायने रखता है।

💡 String = immutable। StringBuilder = mutable और तेज़। StringBuffer = mutable और thread-safe।

String — immutable

String s = "Hello";
s = s + " World";     // हर बार नई string बनाता है

String बदली नहीं जा सकती। हर + बिल्कुल नया String object बनाता है। कुछ joins को यह ठीक है, पर loop में कई बार करें तो धीमा।

StringBuilder — तेज़ और mutable

StringBuilder sb = new StringBuilder("Hello");
sb.append(" World");
sb.append("!");
System.out.println(sb.toString());
Hello World!

StringBuilder उसी object को append() से जगह पर बदलता है — हर बार नए objects नहीं। यह strings बनाने का तेज़, standard विकल्प है, ख़ासकर loops के अंदर।

StringBuffer — thread-safe

StringBuffer sb = new StringBuffer("Hello");
sb.append(" World");
System.out.println(sb.toString());
Hello World

StringBuffer बिल्कुल StringBuilder जैसा चलता है पर इसकी methods synchronized हैं, जो कई threads के एक ही object को edit करने पर सुरक्षित बनाता है। वो सुरक्षा इसे थोड़ा धीमा बनाती है।

Performance क्यों अलग है

// धीमा: हर loop बारी नई String
String s = "";
for (int i = 0; i < 1000; i++) s += i;

// तेज़: एक object, जगह पर edit
StringBuilder b = new StringBuilder();
for (int i = 0; i < 1000; i++) b.append(i);
Dry Run — dekhiye har step kaise chalta hai (i = 0 se shuru)
Stepi ki valueConditionKya huai ab
100 < 1000 → trueloop body chalta haii → 1
211 < 1000 → trueloop body chalta haii → 2
322 < 1000 → trueloop body chalta haii → 3
433 < 1000 → trueloop body chalta haii → 4
544 < 1000 → trueloop body chalta haii → 5
655 < 1000 → trueloop body chalta haii → 6
766 < 1000 → trueloop body chalta haii → 7
877 < 1000 → trueloop body chalta haii → 8
988 < 1000 → trueloop body chalta haii → 9
1099 < 1000 → trueloop body chalta haii → 10
111010 < 1000 → trueloop body chalta haii → 11
121111 < 1000 → trueloop body chalta haii → 12
131212 < 1000 → trueloop body chalta haii → 13
141313 < 1000 → trueloop body chalta haii → 14
151414 < 1000 → trueloop body chalta haii → 15
161515 < 1000 → trueloop body chalta haii → 16
171616 < 1000 → trueloop body chalta haii → 17
181717 < 1000 → trueloop body chalta haii → 18
191818 < 1000 → trueloop body chalta haii → 19
201919 < 1000 → trueloop body chalta haii → 20
212020 < 1000 → trueloop body chalta haii → 21
222121 < 1000 → trueloop body chalta haii → 22
232222 < 1000 → trueloop body chalta haii → 23
242323 < 1000 → trueloop body chalta haii → 24
252424 < 1000 → trueloop body chalta haii → 25
… loop isi tarah chalta rahता hai

String loop हज़ार फेंकने योग्य objects बनाता है; StringBuilder loop एक दोबारा इस्तेमाल करता है। ज़्यादा text-building को यह अंतर विशाल है।

तुलना

बातStringStringBuilderStringBuffer
Mutableनहींहाँहाँ
Thread-safeहाँ (immutable)नहींहाँ
Speedबनाने में धीमासबसे तेज़थोड़ा धीमा
किसके लिएFixed textज़्यादातर buildingMulti-thread building

आम गलतियाँ

  • Loop में String += इस्तेमाल करना। धीमा — StringBuilder इस्तेमाल कीजिए।
  • हर जगह StringBuffer इस्तेमाल करना। Single-threaded code में इसकी thread safety बेकार है; StringBuilder तेज़ है।
  • toString() भूलना। ज़रूरत पड़ने पर builder को toString() से वापस String बनाइए।
  • String के जगह पर बदलने की उम्मीद। यह कभी नहीं होता — यह immutable है।

सारांश

  • String immutable है; हर बदलाव नया object बनाता है।
  • StringBuilder mutable और तेज़ है — text बनाने का default।
  • StringBuffer mutable और thread-safe है पर थोड़ा धीमा।
  • Loops में String += के बजाय StringBuilder इस्तेमाल कीजिए।
  • StringBuffer सिर्फ़ तब चुनिए जब कई threads एक ही text edit करें।

आगे, text की बुनियाद दोहराइए Java strings में, या उन्हें लगाइए reverse a string में।

अक्सर पूछे जाने वाले प्रश्न (FAQ)

String, StringBuffer और StringBuilder में क्या अंतर है?
String immutable है (बदल नहीं सकती)। StringBuilder और StringBuffer mutable हैं (नए objects बिना बदल सकते हैं)। StringBuilder तेज़ पर thread-safe नहीं; StringBuffer thread-safe पर थोड़ा धीमा। ज़्यादातर text-building को StringBuilder इस्तेमाल कीजिए।
Concatenation को StringBuilder String से तेज़ क्यों है?
चूँकि String immutable है, हर + नया object बनाता है, जो loop में धीमा है। StringBuilder उसी object को append() से जगह पर edit करता है, वे सारे अतिरिक्त objects बचाकर।
StringBuffer के लिए thread-safe का क्या मतलब है?
Thread-safe मतलब कई threads इसे एक साथ data corrupt किए बिना इस्तेमाल कर सकते हैं, क्योंकि इसकी methods synchronized हैं। यह सुरक्षा थोड़ी speed cost जोड़ती है, इसीलिए StringBuilder (synchronized नहीं) तेज़ है।
StringBuilder बनाम StringBuffer कब इस्तेमाल करूँ?
सामान्य single-threaded code (आम मामला) में speed को StringBuilder इस्तेमाल कीजिए। StringBuffer सिर्फ़ तब जब कई threads एक ही text object को एक साथ बदलेंगे और आपको thread safety चाहिए।
Loop में String या StringBuilder इस्तेमाल करूँ?
Loop में StringBuilder इस्तेमाल कीजिए। Loop के अंदर += से String बनाना कई temporary objects बनाता है और धीमा है; StringBuilder.append() कहीं ज़्यादा कुशल है।
← Back to Java Tutorial
🔗

Share this topic with a friend

यह topic किसी दोस्त को भेजें

Found it useful? Send it to a classmate learning the same thing.

अच्छा लगा? जो दोस्त यही सीख रहा है, उसे भेज दीजिए।

💻 लाइव कोड एडिटर

इस पेज के प्रोग्राम यहीं तैयार हैं — चलाएँ, बदलें और सीखें। कुछ भी इंस्टॉल किए बिना।
OneCompiler द्वारा संचालित। कोड एडिटर में अपने आप आ जाता है — Run दबाकर आउटपुट देखें। अगर एडिटर न खुले तो नए टैब में खोलें.
अगला topicArrayList vs LinkedList आपकी प्रगति: 38 / 61 (62%) · Lesson 39 / 61 आगे बढ़ें →

यह lesson कैसा लगा?

आपकी राय से हम content और बेहतर बनाते हैं।

अपना review और सुझाव लिखें (वैकल्पिक)

Review approve होने के बाद आपका नाम और शहर इसके साथ public दिख सकते हैं। Email या phone न लिखें।

▶ CodingEasily on YouTube

Video से सीखें – आसान Hindi में

चुनी हुई video: RDBMS भाग 3 – Class XI Commerce IT

▶ Channel subscribe करें