के बाद से:
StringBuilder sb1 = new StringBuilder("hello");
StringBuilder sb2 = new StringBuilder("hello");
Console.WriteLine(sb1 == sb2); //false
इस तरह आप उनके मूल्यों की तुलना कर सकते है दोनों संदर्भ प्रकार हैं, उनके पास अलग-अलग परिणाम क्यों हैं?
क्योंकि string
ऑब्जेक्ट्स अत्यधिक अनुकूलित हैं। विशेष रूप से, चूंकि वे अपरिवर्तनीय हैं, इसलिए उन्हें डुप्लिकेशंस को रोकने के लिए कंपाइलर द्वारा प्रशिक्षित किया जा सकता है।
यदि आपके पास दो अलग-अलग string
ऑब्जेक्ट्स हैं जो दोनों वर्णों की सटीक समान स्ट्रिंग का प्रतिनिधित्व करते हैं (जैसा कि आपके उदाहरण में है), संकलक वास्तविक स्ट्रिंग ऑब्जेक्ट का केवल एक उदाहरण पहचान लेगा और बनाए रखेगा।
परिणाम यह है कि s1
और s2
ऑब्जेक्ट्स वास्तव में वही ऑब्जेक्ट हैं जहां तक संकलक का संबंध है और यहां तक कि स्मृति में उसी स्थान का संदर्भ भी है।
यह बहीखाता "इंटर्न टेबल" नामक किसी चीज़ में दृश्यों के पीछे होती है, लेकिन यह वास्तव में कुछ नहीं है जिसे आपको स्वयं चिंता करने की आवश्यकता है। महत्वपूर्ण बात यह है कि सभी स्ट्रिंग अक्षर को संकलक द्वारा डिफ़ॉल्ट रूप से प्रशिक्षित किया जाता है।
उसी प्रकार की चीज StringBuilder
ऑब्जेक्ट्स के लिए होती है, क्योंकि वे अपरिवर्तनीय नहीं हैं। वे आपको एक स्ट्रिंग ऑब्जेक्ट को संशोधित करने की अनुमति देने के लिए डिज़ाइन किए गए हैं, और इस तरह, अनुकूलन बहुत अधिक समझ में नहीं आता है। यही कारण है कि आपकी sb1
और sb2
वस्तुओं को वास्तव में दो अलग-अलग वस्तुओं के रूप में देखा जाता है।
अंगूठे का नियम काफी सरल है: डिफ़ॉल्ट रूप से string
का उपयोग करें, या जब आप अक्षरों की एक अपरिवर्तनीय स्ट्रिंग चाहते हैं। केवल StringBuilder
का उपयोग करें जब आप एक ही स्ट्रिंग को कई बार संशोधित करना चाहते हैं, तो लूप या कोड के अन्य अपेक्षाकृत छोटे सेक्शन में कहें।
प्रासंगिक पढ़ने: Optimizing C# String Performance
स्रोत
2012-05-19 02:40:32
आप दो अलग-अलग 'स्ट्रिंगबिल्डर' ऑब्जेक्ट संदर्भों की तुलना कर रहे हैं। वे दो अलग-अलग वस्तुएं हैं। – birryree
+1, न केवल एक उत्कृष्ट प्रश्न के लिए, बल्कि इसे स्पष्ट रूप से पूछने के लिए कोड के पूर्ण नमूने के साथ, यह स्पष्ट रूप से पूछने के लिए। –
इस प्रश्न में वास्तव में 'स्ट्रिंगबिल्डर' के साथ कुछ लेना देना नहीं है। यह वास्तव में है "दो स्ट्रिंग चर के साथ दो स्ट्रिंग वैरिएबल प्रारंभ क्यों किए जाते हैं जिसमें एक ही वर्ण अनुक्रम एक ही वस्तु के रूप में तुलना करता है"? –