दूसरा संदर्भ एक्वाल्स कॉल झूठा रिटर्न देता है। एस 4 में स्ट्रिंग क्यों नहीं है? (मैं स्ट्रिंग संयोजन से अधिक StringBuilder के फायदे के बारे में परवाह नहीं है।)स्ट्रिंग इंटर्निंग?
string s1 = "tom";
string s2 = "tom";
Console.Write(object.ReferenceEquals(s2, s1)); //true
string s3 = "tom";
string s4 = "to";
s4 += "m";
Console.Write(object.ReferenceEquals(s3, s4)); //false
जब मैं String.Intern(s4);
करते हैं, मैं अभी भी झूठी मिलता है।
यहां, दोनों एस 3 और एस 4 इंटर्न किए गए हैं लेकिन उनके संदर्भ बराबर नहीं हैं?
string s3 = "tom";
string s4 = "to";
s4 += "m";
String.Intern(s4);
Console.WriteLine(s3 == s4); //true
Console.WriteLine(object.ReferenceEquals(s3, s4)); //false
Console.WriteLine(string.IsInterned(s3) != null); //true (s3 is interned)
Console.WriteLine(string.IsInterned(s4) != null); //true (s4 is interned)
कृपया, एस 4 = स्ट्रिंग के साथ एक और समय सत्यापित करें। इंटरनेट (एस 4); कंसोल। राइट (ऑब्जेक्ट। रेफरेंस एक्वाल्स (एस 3, एस 4)); यह .NET 2.0,3.0,3.5,4.0 के लिए सच है। इसके अलावा, यदि आप s3 = स्ट्रिंग का परीक्षण करते हैं। इंटरनेट (एस 3); कंसोल। राइट (ऑब्जेक्ट। रेफरेंस एक्वाल्स (एस 3, एस 1)); आप देख सकते हैं कि s3 = स्ट्रिंग। इंटरनेट (एस 3); कुछ भी नहीं करें क्योंकि स्कॉट डोर्मन ने सही लिखा है, एस 1 से एस 3 तक सभी पहले से ही इंटरैड किए गए हैं और एस 4 = स्ट्रिंग के साथ इसे बदलने से पहले केवल एक अद्वितीय ढेर पॉइंटर पर एस 4 पॉइंट हैं। इंटरनेशनल (एस 4); – Oleg
string.Interned() का मतलब यह नहीं है कि पारित स्ट्रिंग ऑब्जेक्ट को एक इंटर्न वाली स्ट्रिंग के रूप में बनाया गया था, इसका मतलब है कि इंटर्न वाले स्टोर में एक ही मूल्य है। उलझन में, हुह! –
समझ में आता है। लेकिन स्ट्रिंग। इंटरनेशनल (एस 4) तब स्ट्रिंग को इंटर्न नहीं करता है? – rkrauter