स्ट्रिंग मैनिपुलेशन में सही चुनाव प्रदर्शन पर बड़ा प्रभाव डालता है।
String (इम्यूटेबल)
- बनने के बाद **नहीं बदल सकती**।
- हर ऑपरेशन (
+,Replace,Substring) **नई स्ट्रिंग** बनाता है। - मेमोरी में नया ऑब्जेक्ट, पुराना गार्बेज कलेक्शन के लिए।
- थ्रेड-सेफ (इम्यूटेबिलिटी के कारण)।
string str = "Welcome!"; str += "Hello"; // नई स्ट्रिंग str += "World"; // फिर नई स्ट्रिंग // 3 स्ट्रिंग ऑब्जेक्ट्स बने
StringBuilder (म्यूटेबल)
- **बदली जा सकती है** - आंतरिक बफर संशोधित होता है।
- नया ऑब्जेक्ट **नहीं** बनाता (बफर भरने तक)।
- बड़े/बार-बार संशोधन के लिए कुशल।
- थ्रेड-सेफ **नहीं**।
StringBuilder sb = new StringBuilder("Welcome!");
sb.Append("Hello");
sb.Append("World");
string result = sb.ToString(); // अंत में एक बार कनवर्ट
तुलना तालिका
| विशेषता | String | StringBuilder |
|---|---|---|
| म्यूटेबिलिटी | इम्यूटेबल | म्यूटेबल |
| प्रदर्शन (कई संशोधन) | खराब (O(n²)) | अच्छा (O(n)) |
| मेमोरी आवंटन | हर ऑपरेशन पर | बफर विस्तार पर |
| थ्रेड सेफ्टी | हाँ | नहीं |
| उपयोग | कम संशोधन, कुंजियाँ, स्थिर टेक्स्ट | लूप में बिल्डिंग, बड़ी स्ट्रिंग्स |
कब क्या उपयोग करें?
- String: सरल कॉनकैट (2-3), इंटरपोलेशन
$"...", कुंजियाँ, कॉन्स्टेंट्स। - StringBuilder: लूप में स्ट्रिंग बिल्डिंग, फाइल/नेटवर्क स्ट्रीम कंस्ट्रक्शन, बड़े टेक्स्ट प्रोसेसिंग।
- क्षमता सेट करें:
new StringBuilder(1000)रीअलोकेशन कम करता है।