StringBufferएक थ्रेड-सेफ, म्यूटेबल कैरेक्टर सीक्वेंस है।Stringक्लास (इम्यूटेबल) के विपरीत,StringBufferक्लास म्यूटेबल है। यानी हमStringBufferऑब्जेक्ट की सामग्री को बदल सकते हैं।- जब हम
StringBufferक्लास के स्ट्रिंग को संशोधित करते हैं, तो हम नयाStringऑब्जेक्ट नहीं बना रहे होते, बल्कि मूल स्ट्रिंग पर ही सीधे ऑपरेट कर रहे होते हैं। - इस कारण से,
StringBufferक्लासStringक्लास से अलग मेथड्स का सेट प्रदान करती है, जो सभी उस बफर पर सीधे ऑपरेट करते हैं जिसमें स्ट्रिंग होती है। StringBufferको केवलnewऑपरेटर के उपयोग से औरStringBufferकंस्ट्रक्टर के अंदर स्ट्रिंग मान पास करके परिभाषित किया जा सकता है।
उदाहरण
class StringBufferDemo {
public static void main(String arg[]) {
StringBuffer sb = new StringBuffer();
sb.append("Java Tutorials Point");
System.out.println(sb);
}
}
उपरोक्त प्रोग्राम में, हमने शुरू में StringBuffer क्लास का एक इंस्टेंस बनाया और append() मेथड का उपयोग करके "Java Tutorials Point" को StringBuffer क्लास में जोड़ा।
आउटपुट
Java Tutorials Point
StringBuffer के प्रमुख मेथड्स
| मेथड | विवरण |
|---|---|
append(String str) | अंत में स्ट्रिंग जोड़ता है |
insert(int offset, String str) | निर्दिष्ट स्थिति पर स्ट्रिंग डालता है |
delete(int start, int end) | सबस्ट्रिंग हटाता है |
replace(int start, int end, String str) | सबस्ट्रिंग को बदलता है |
reverse() | कैरेक्टर सीक्वेंस को उलट देता है |
capacity() | वर्तमान क्षमता लौटाता है |
ensureCapacity(int minimumCapacity) | न्यूनतम क्षमता सुनिश्चित करता है |
setLength(int newLength) | लंबाई सेट करता है |
charAt(int index) | निर्दिष्ट इंडेक्स पर कैरेक्टर लौटाता है |
substring(int start, int end) | सबस्ट्रिंग लौटाता है |
toString() | स्ट्रिंग प्रतिनिधित्व लौटाता है |
String vs StringBuffer - मेमोरी और प्रदर्शन
// String - हर बार नया ऑब्जेक्ट बनता है (धीमा)
String s = "";
for (int i = 0; i < 10000; i++) {
s += "a"; // 10000 String ऑब्जेक्ट्स बनेंगे
}
// StringBuffer - एक ही ऑब्जेक्ट पर ऑपरेशन (तेज़)
StringBuffer sb = new StringBuffer();
for (int i = 0; i < 10000; i++) {
sb.append("a"); // केवल 1 ऑब्जेक्ट
}
नोट: StringBuilder प्राथमिकता
Java 5 के बाद से, सिंगल-थ्रेडेड कोड के लिए StringBuilder को प्राथमिकता दी जाती है क्योंकि यह StringBuffer के समान API प्रदान करता है लेकिन सिंक्रोनाइजेशन ओवरहेड के बिना तेज़ होता है। StringBuffer केवल तब उपयोग करें जब बफर वास्तव में एकाधिक थ्रेड्स द्वारा साझा किया जाता हो।
निष्कर्ष: StringBuffer म्यूटेबल स्ट्रिंग मैनिपुलेशन के लिए उपयोगी है, विशेष रूप से थ्रेड-सेफ संदर्भ में। आधुनिक सिंगल-थ्रेडेड कोड के लिए StringBuilder बेहतर विकल्प है।