StringBuilder बनाम StringBuffer
थ्रेड सुरक्षा के लाभ-हानि
StringBuilder बनाम StringBuffer, CoddyKit पर Java Academy का एक निःशुल्क पाठ है। यह 4 में से 4वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह Java Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Java Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
दो परिवर्तनशील क्लास
Java में दो परिवर्तनशील स्ट्रिंग क्लास हैं: StringBuilder और StringBuffer। उनके एपीआई लगभग समान हैं, लेकिन उनमें एक महत्वपूर्ण अंतर है: थ्रेड सुरक्षा।
एक जैसा एपीआई
दोनों क्लास append, insert, delete, reverse और बाकी विधियाँ प्रदान करते हैं। एक का उपयोग करने वाला कोड आम तौर पर केवल प्रकार-नाम बदलकर दूसरे में बदला जा सकता है।
public class Main {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer();
sb.append("Hello").append(", ").append("World");
System.out.println(sb);
}
}StringBuffer समकालित है
StringBuffer की विधियाँ समकालित होती हैं, जिसका अर्थ है कि कई थ्रेड एक ही इंस्टेंस को सुरक्षित रूप से बदल सकते हैं। इस सुरक्षा की थोड़ी प्रदर्शन-लागत होती है।
public class Main {
public static void main(String[] args) {
StringBuffer buffer = new StringBuffer("thread-safe");
buffer.append("!");
System.out.println(buffer);
}
}StringBuilder समकालित नहीं है
StringBuilder समकालिकरण नहीं करता, इसलिए यह तेज़ होता है। इसका दूसरा पक्ष यह है कि बाहरी समन्वय के बिना एक ही इंस्टेंस को कई थ्रेड के बीच साझा करना सुरक्षित नहीं है।
public class Main {
public static void main(String[] args) {
StringBuilder builder = new StringBuilder("fast");
builder.append("!");
System.out.println(builder);
}
}StringBuilder का उपयोग कब करें
सामान्य स्थिति में StringBuilder का उपयोग करें: एक ही विधि या थ्रेड के भीतर स्ट्रिंग बनाने के लिए। लगभग सभी रोज़मर्रा के कोड के लिए यही डिफ़ॉल्ट विकल्प है।
public class Main {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 5; i++) {
sb.append("#");
}
System.out.println(sb);
}
}StringBuffer का उपयोग कब करें
StringBuffer का उपयोग केवल तब करें, जब वही बिल्डर इंस्टेंस वास्तव में कई थ्रेड द्वारा साझा और बदला जा रहा हो। व्यवहार में ऐसा बहुत कम होता है।
public class Main {
public static void main(String[] args) {
StringBuffer shared = new StringBuffer("log: ");
shared.append("event A; ");
shared.append("event B");
System.out.println(shared);
}
}स्थानीय चर साझा नहीं किए जाते
किसी एक विधि के भीतर ही घोषित और उपयोग किया गया निर्माता अन्य थ्रेडों को कभी दिखाई नहीं देता, इसलिए वहाँ StringBuilder हमेशा सही विकल्प है। सिंक्रोनाइज़ेशन का न होना कोई समस्या उत्पन्न नहीं कर सकता।
public class Main {
static String build() {
StringBuilder sb = new StringBuilder();
sb.append("local only");
return sb.toString();
}
public static void main(String[] args) {
System.out.println(build());
}
}प्रदर्शन में अंतर
StringBuffer में सिंक्रोनाइज़ेशन का अतिरिक्त भार उसे एकल-थ्रेड उपयोग में धीमा बनाता है। कसे हुए लूप के लिए StringBuilder बेहतर प्रदर्शन करता है।
public class Main {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 100000; i++) {
sb.append('x');
}
System.out.println("Built length: " + sb.length());
}
}ऐतिहासिक टिप्पणी
प्रारंभिक Java में StringBuffer पहले आया था। सामान्य एकल-थ्रेड उपयोग के लिए असिंक्रोनाइज़्ड और तेज़ विकल्प के रूप में StringBuilder को Java 5 में जोड़ा गया।
सही विकल्प चुनना
डिफ़ॉल्ट रूप से StringBuilder का उपयोग करें। केवल तभी StringBuffer पर जाएँ, जब आप प्रमाणित कर सकें कि एक ही इंस्टेंस कई थ्रेडों में साझा किया गया है। अन्यथा आपको ऐसी सुरक्षा की कीमत चुकानी पड़ेगी जिसकी आपको आवश्यकता नहीं है।
public class Main {
public static void main(String[] args) {
StringBuilder result = new StringBuilder();
result.append("Use StringBuilder ").append("by default");
System.out.println(result);
}
}दोनों String में बदलते हैं
दोनों क्लासें toString() के माध्यम से एक अपरिवर्तनीय String बनाती हैं। इनके बीच का चुनाव केवल निर्माण प्रक्रिया को प्रभावित करता है, अंतिम परिणाम को नहीं।
public class Main {
public static void main(String[] args) {
String a = new StringBuilder("one").toString();
String b = new StringBuffer("two").toString();
System.out.println(a + " " + b);
}
}त्वरित जाँच
StringBuilder और StringBuffer के बीच मुख्य अंतर क्या है?
पुनरावृत्ति
आपने इनके बीच के संतुलन सीखे:
- दोनों के एपीआई लगभग एक जैसे हैं
StringBufferसिंक्रोनाइज़्ड है (थ्रेड-सुरक्षित, लेकिन धीमा)StringBuilderअसिंक्रोनाइज़्ड है (तेज़)- एकल-थ्रेड निर्माण के लिए डिफ़ॉल्ट रूप से
StringBuilderका उपयोग करें StringBufferका उपयोग केवल वास्तव में साझा किए गए इंस्टेंस के लिए करें
एआई शिक्षक के साथ Java सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 104
- पाठ
- 374
अक्सर पूछे जाने वाले प्रश्न
क्या “StringBuilder बनाम StringBuffer” पाठ निःशुल्क है?
हाँ—“StringBuilder बनाम StringBuffer” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और Java Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। Java Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“StringBuilder बनाम StringBuffer” में मैं क्या सीखूँगा?
थ्रेड सुरक्षा के लाभ-हानि आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Java Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या Java Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Java Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 4वाँ पाठ है।
“StringBuilder बनाम StringBuffer” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस Java Academy पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर Java Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- स्ट्रिंग अपरिवर्तनीय क्यों होती हैं
- StringBuilder से स्ट्रिंग बनाना
- StringBuilder के फ़ंक्शन
- StringBuilder बनाम StringBuffer