Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Java

Java में String के बजाय StringBuffer/StringBuilder कब उपयोग करें?


  • String क्लास के ऑब्जेक्ट्स इम्यूटेबल (immutable) होते हैं, जबकि StringBuffer और StringBuilder ऑब्जेक्ट्स म्यूटेबल (mutable) होते हैं।
  • StringBuffer सिंक्रोनाइज्ड (synchronized) है (थ्रेड-सेफ), जबकि StringBuilder सिंक्रोनाइज्ड नहीं है (नॉन-थ्रेड-सेफ)।
  • कैटेनेशन ऑपरेटर "+" आंतरिक रूप से StringBuffer या StringBuilder का उपयोग करके कार्यान्वित किया जाता है।
  • यदि ऑब्जेक्ट का मान बदलने वाला नहीं है, तो String क्लास का उपयोग करें क्योंकि String ऑब्जेक्ट इम्यूटेबल है।
  • यदि ऑब्जेक्ट का मान बदल सकता है और केवल एक थ्रेड द्वारा एक्सेस किया जाएगा, तो StringBuilder का उपयोग करें क्योंकि यह असिंक्रोनाइज्ड (अनसिंक्रोनाइज्ड) है और तेज़ है।
  • यदि ऑब्जेक्ट का मान बदल सकता है और एकाधिक थ्रेड्स द्वारा संशोधित किया जाएगा, तो StringBuffer का उपयोग करें क्योंकि यह सिंक्रोनाइज्ड (थ्रेड-सेफ) है।

प्रदर्शन तुलना

विशेषताStringStringBufferStringBuilder
म्यूटेबिलिटीइम्यूटेबलम्यूटेबलम्यूटेबल
थ्रेड-सेफ्टीहां (इम्यूटेबल होने के कारण)हां (सिंक्रोनाइज्ड)नहीं
प्रदर्शनबार-बार संशोधन पर धीमाधीमा (सिंक्रोनाइजेशन ओवरहेड)तेज़ (कोई सिंक्रोनाइजेशन नहीं)
उपयोगस्थिर टेक्स्ट, कॉन्स्टेंट्समल्टी-थ्रेडेड वातावरण में स्ट्रिंग मैनिपुलेशनसिंगल-थ्रेडेड वातावरण में स्ट्रिंग मैनिपुलेशन
उपलब्धताJava 1.0 सेJava 1.0 सेJava 5.0 से

कब क्या उपयोग करें? - निर्णय गाइड

  1. String: जब स्ट्रिंग स्थिर हो, कॉन्फिगरेशन मान, लिटरल्स, कीज़, आदि।
    String url = "https://api.example.com";
  2. StringBuilder: जब स्ट्रिंग को बार-बार संशोधित करना हो और केवल एक थ्रेड द्वारा उपयोग किया जाता हो (सबसे आम मामला)।
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < 1000; i++) {
        sb.append(i).append(",");
    }
    String result = sb.toString();
  3. StringBuffer: जब स्ट्रिंग को एकाधिक थ्रेड्स द्वारा साझा और संशोधित किया जाता हो (दुर्लभ)।
    // मल्टी-थ्रेडेड लॉगिंग बफर
    StringBuffer logBuffer = new StringBuffer();
    // थ्रेड्स logBuffer.append(...) कॉल करते हैं

महत्वपूर्ण नोट

आधुनिक Java (Java 5+) में, कंपाइलर + ऑपरेटर को StringBuilder में ऑप्टिमाइज़ कर देता है। इसलिए साधारण स्ट्रिंग कन्केटनेशन के लिए + का उपयोग करना ठीक है:

String s = "Hello " + "World " + "!"; // कंपाइल टाइम पर ऑप्टिमाइज़

लेकिन लूप में + का उपयोग न करें - वहां StringBuilder स्पष्ट रूप से बनाएं।

निष्कर्ष: अधिकांश मामलों में StringBuilder (सिंगल-थ्रेडेड) सबसे अच्छा विकल्प है। StringBuffer केवल मल्टी-थ्रेडेड साझा बफर के लिए उपयोग करें। String स्थिर टेक्स्ट के लिए उपयोग करें।

  1. Java में StringIndexOutOfBoundsException क्या है? Java में StringIndexOutOfBoundsException क्या है?

    स्ट्रिंग्स का उपयोग Java में वर्णों के अनुक्रम को संग्रहीत करने के लिए किया जाता है, उन्हें ऑब्जेक्ट्स के रूप में माना जाता है। java.lang पैकेज का String क्लास एक स्ट्रिंग का प्रतिनिधित्व करता है। आप स्ट्रिंग को या तो new कीवर्ड का उपयोग करके (किसी अन्य ऑब्जेक्ट की तरह) बना सकते हैं, या लिटरल को मान

  1. - Java Date को फॉर्मेटेड String में बदलने के लिए SimpleDateFormat क्लास का उपयोग कैसे करें?

    Java SimpleDateFormat क्लास Java String को Date में या Date को String में कन्वर्ट करने के लिए प्रदान करती है। उदाहरण import java.util.Date; import java.text.SimpleDateFormat; import java.util.Calendar; public class SimpleDateFormatTest { public static void main(String[] args) { // आज क

  1. - Java में String के बजाय StringBuffer क्यों उपयोग करना चाहिए?

    StringBuffer एक थ्रेड-सेफ, म्यूटेबल कैरेक्टर सीक्वेंस है। String क्लास (इम्यूटेबल) के विपरीत, StringBuffer क्लास म्यूटेबल है। यानी हम StringBuffer ऑब्जेक्ट की सामग्री को बदल सकते हैं। जब हम StringBuffer क्लास के स्ट्रिंग को संशोधित करते हैं, तो हम नया String ऑब्जेक्ट नहीं बना रहे होते, बल्कि मूल स