दिलचस्प पोस्ट
आर प्रोग्रामिंग भाषा में ~ (टिल्ड) का प्रयोग करें नेटबिंस में "असंगत स्रोत कोड" रनटाइम एक्सप्शन डायनेमिक रूप से बनाए गए <iframe> को <script> को अभिभावक पृष्ठ में स्क्रिप्ट चलाने क्यों लगता है? आप क्लासिक एएसपी कैसे डिबग करते हैं? PHP: "नोटिस: अपरिभाषित चर", "नोटिस: अपरिभाषित सूचकांक", और "नोटिस: अपरिभाषित ऑफ़सेट" UIImagePickerController कैमरा पूर्वावलोकन परिदृश्य एप में चित्र है एक दृश्य की पृष्ठभूमि में एक अर्धवृत्त बनाएं हमें रेडिक्स का उपयोग करने की आवश्यकता क्यों है? नियंत्रण। अतिरिक्त रेंज (…) धीमा है NSMutablearray को NSUserDefaults में कैसे सहेजना है नेविगेशन नियंत्रक पुश व्यू नियंत्रक जावा में एक कस्टम ईवेंट बनाएं अद्वितीय पहचानकर्ता द्वारा समेकित और एक स्ट्रिंग में संबंधित मानों को जोड़ना बिल्ड नंबर बढ़ाने का बेहतर तरीका? संकुचित करें HTTP प्राप्त प्रतिक्रिया

अस्थायी मतलब क्या है?

अगर कोई स्ट्रिंग अपरिवर्तनीय है, तो इसका मतलब यह है कि …. (जावास्क्रिप्ट मानिए)

var str = 'foo'; alert(str.substr(1)); // oo alert(str); // foo 

क्या इसका मतलब है, जब किसी स्ट्रिंग पर तरीकों को कॉल करते हैं, तो वह संशोधित स्ट्रिंग लौटाएगा, लेकिन यह प्रारंभिक स्ट्रिंग नहीं बदलेगी?

यदि स्ट्रिंग अस्थिर होता है, तो क्या इसका मतलब है कि दूसरा alert() oo alert() रूप में अच्छी तरह से वापस आ जाएगी?

वेब के समाधान से एकत्रित समाधान "अस्थायी मतलब क्या है?"

इसका मतलब है कि एक बार आप ऑब्जेक्ट को इन्स्तांत करते हैं, तो आप इसके गुणों को बदल नहीं सकते हैं। आपके पहले चेतावनी में आप फू को नहीं बदल रहे हैं आप एक नया स्ट्रिंग बना रहे हैं। यही कारण है कि आपके द्वितीय अलर्ट में ओओ की जगह "फू" दिखाई देगा।

क्या इसका मतलब है, जब स्ट्रिंग पर तरीके कॉल करते हैं, तो वह संशोधित स्ट्रिंग लौटाएगा, लेकिन यह प्रारंभिक स्ट्रिंग नहीं बदलेगी?

हाँ। स्ट्रिंग को एक बार बनाते समय कुछ भी बदल नहीं सकता। अब इसका मतलब यह नहीं है कि आप str चर के लिए एक नया स्ट्रिंग ऑब्जेक्ट नहीं दे सकते। आप वर्तमान वस्तु को बदल नहीं सकते हैं जो स्ट्र संदर्भ

यदि स्ट्रिंग अस्थिर होता है, तो क्या इसका मतलब है कि दूसरा चेतावनी (ओ) के रूप में अच्छी तरह से वापस आ जाएगी?

तकनीकी रूप से, नहीं, क्योंकि उपस्ट्रिंग पद्धति एक नई स्ट्रिंग देता है। ऑब्जेक्ट को अस्थिर बनाने से, विधि बदल नहीं होती। इसे निष्प्रभावी बनाने का अर्थ है कि तकनीकी रूप से, आप ऐसा कर सकते हैं ताकि उप-स्थान एक नया बनाने के बजाय मूल स्ट्रिंग बदल जाएगा।

निचले स्तर पर, अपरिवर्तनीयता का मतलब है कि मेमोरी को स्ट्रिंग में संग्रहीत किया गया है, इसे संशोधित नहीं किया जाएगा। एक बार जब आप एक स्ट्रिंग "foo" बनाते हैं, तो कुछ स्मृति को "foo" मान को स्टोर करने के लिए आवंटित किया जाता है इस मेमोरी को बदला नहीं जाएगा यदि आप स्ट्रिंग को संशोधित करते हैं, कहते हैं, substr(1) , एक नई स्ट्रिंग बनाई गई है और स्मृति का एक अलग हिस्सा आवंटित किया गया है जो "oo" को संग्रहीत करेगा अब आपके पास स्मृति में दो स्ट्रिंग हैं, "foo" और "oo" । यहां तक ​​कि अगर आप अब "foo" का उपयोग नहीं करने जा रहे हैं, तो यह कचरा इकट्ठा होने तक चारों ओर रह जाएगा।

एक कारण है कि स्ट्रिंग संचालन तुलनात्मक रूप से महंगा है

अपरिवर्तनीय मतलब है कि जो परिवर्तित या संशोधित नहीं किया जा सकता है

इसलिए जब आप किसी स्ट्रिंग के लिए मान असाइन करते हैं, तो यह मान की शुरुआत से विरोध के रूप में खरोंच से बनाया गया है। इसलिए हर बार एक नया मान एक ही स्ट्रिंग को सौंपा जाता है, एक प्रतिलिपि बनाई जाती है। हकीकत में, आप मूल मूल्य को कभी भी बदल नहीं रहे हैं।

मैं जावास्क्रिप्ट के बारे में निश्चित नहीं हूँ, लेकिन जावा में, स्ट्रिंग्स "स्ट्रिंग कॉन्टैंट पूल" के साथ स्थिरता के लिए एक अतिरिक्त कदम उठाते हैं। स्ट्रिंग स्ट्रिंग लीटरल्स ( "foo" ) या String क्लास कन्स्ट्रक्टर के साथ बनाया जा सकता है। स्ट्रिंग लीटरल के साथ स्ट्रिंग्स स्ट्रिंग कॉन्टैंट पूल का एक हिस्सा हैं, और समान स्ट्रिंग शब्दकिल हमेशा पूल से समान मेमोरी एड्रेस होंगे।

उदाहरण:

  String lit1 = "foo"; String lit2 = "foo"; String cons = new String("foo"); System.out.println(lit1 == lit2); // true System.out.println(lit1 == cons); // false System.out.println(lit1.equals(cons)); // true 

उपरोक्त में, lit1 और lit2 दोनों एक ही स्ट्रिंग का उपयोग करके का निर्माण किया जाता है, इसलिए वे उसी स्मृति पते पर इंगित कर रहे हैं; lit1 == lit2 परिणाम true , क्योंकि वे वही वस्तु हैं

हालांकि, cons कंस्ट्रक्टर का उपयोग करके बनाया गया है यद्यपि पैरामीटर एक ही स्ट्रिंग स्थिर है, कन्स्ट्रक्टर cons लिए नई स्मृति को आवंटित करता है, जिसका अर्थ है कि समान डेटा युक्त होने के बावजूद lit2 lit1 और lit2 के समान वस्तु नहीं है।

बेशक, चूंकि तीन स्ट्रिंग्स में सभी समान वर्ण डेटा होते हैं, equals विधि का उपयोग करते हुए सत्य वापस आ जाएगा।

(स्ट्रिंग निर्माण के दोनों प्रकार अपरिवर्तनीय हैं, बिल्कुल)

अपरिवर्तनीय मतलब है कि मूल्य को बदला नहीं जा सकता। स्ट्रिंग ऑब्जेक्ट बनने के बाद उसे अपरिवर्तनीय रूप से संशोधित नहीं किया जा सकता। यदि आप स्ट्रिंग के उपस्ट्रिंग का अनुरोध करते हैं तो अनुरोधित भाग के साथ एक नया स्ट्रिंग बनाया जाता है।

स्ट्रिंगबफ़र का उपयोग करते हुए स्ट्रिंग्स को बदले में ऑपरेशन को और अधिक कुशल बना देता है क्योंकि स्ट्रिंगबफ़र वर्ण सरणी की क्षमता और सरणी की लंबाई (एक चार सरणी स्वरूप में स्ट्रिंग) को पकड़ने के लिए चर के साथ एक वर्ण सरणी में स्ट्रिंग को स्टोर करता है

स्ट्रिंग से स्टैक्स तक … एरिक लिपर्ट के ब्लॉग से ली गई उदाहरण को समझने के लिए एक सरल:

सी # 3.0, भाग दो में ए * का उपयोग कर पथ ढूँढना …

सिस्टम की तरह अस्थिर ढेर। Colllections.Generic.Stack स्पष्ट रूप से उपयुक्त नहीं है। हम एक मौजूदा पथ को लेने और इसके अंतिम तत्वों के सभी पड़ोसियों के लिए नए रास्ते बनाने में सक्षम होना चाहते हैं, लेकिन मानक स्टैक पर एक नया नोड धक्का स्टैक को संशोधित करता है। हमें इसे दबाए जाने से पहले स्टैक की प्रतियां बनाना पड़ेगा, जो मूर्खतापूर्ण है क्योंकि फिर हम इसकी सभी सामग्रियों को अनावश्यक रूप से दोहराएंगे।

अपरिवर्तनीय ढेर की इस समस्या नहीं है एक अपरिवर्तनीय स्टैक पर धकेलना केवल एक नया स्टैक बनाता है जो पुराने पूंछ के रूप में अपनी पूंछ से जोड़ता है। चूंकि स्टैक अपरिवर्तनीय है, कुछ अन्य कोड का कोई खतरा नहीं है और पूंछ सामग्री के साथ गड़बड़ कर रहा है। आप अपने दिल की सामग्री को पुरानी स्टैक का इस्तेमाल करते रह सकते हैं

अस्थिरता के नीचे की गहराई में जाने के लिए, एरिक के पदों को इस एक से शुरू करते हुए पढ़ें:

सी # भाग में अपरिवर्तनीयता: प्रतिरक्षाशीलता के प्रकार

परिवर्तनशीलता की पाठ्य-पुस्तक की परिभाषा उत्तरदायी है या परिवर्तन या परिवर्तन के अधीन है। प्रोग्रामिंग में, हम उन वस्तुओं का अर्थ का उपयोग करते हैं जिनके राज्य को समय के साथ बदलने की अनुमति है। एक अचल मूल्य सटीक विपरीत है – इसे बनाया गया है के बाद, यह कभी भी बदल नहीं सकता है।

अगर यह अजीब लगता है, मुझे आपको याद दिलाने की अनुमति दें कि हम सभी समय के उपयोग के कई मूल्य वास्तव में अपरिवर्तनीय हैं

 var statement = "I am an immutable value"; var otherStr = statement.slice(8, 17); 

मुझे लगता है कि कोई भी यह जानने के लिए आश्चर्यचकित नहीं होगा कि दूसरी पंक्ति किसी भी तरह से बयान में स्ट्रिंग बदलती नहीं है। असल में, कोई स्ट्रिंग विधियां उस स्ट्रिंग को बदलती हैं जो वे काम करती हैं, वे सभी नई स्ट्रिंग्स वापस करते हैं। इसका कारण यह है कि तार अपरिवर्तनीय हैं – वे बदल नहीं सकते हैं, हम केवल नए स्ट्रिंग्स ही बना सकते हैं।

स्ट्रिंग जावास्क्रिप्ट में निर्मित एकमात्र अचल मूल्य नहीं हैं। नंबर भी अपरिवर्तनीय है क्या आप एक ऐसे पर्यावरण की कल्पना भी कर सकते हैं जहां अभिव्यक्ति का मूल्यांकन 2 + 3 में संख्या 2 का अर्थ बदल जाता है? यह बेतुका लगता है, फिर भी हम यह हमारे वस्तुओं और सरणियों के साथ हर समय करते हैं।

इस अवधारणा को समझने का एक तरीका यह है कि यह देखने के लिए कि जावास्क्रिप्ट सभी ऑब्जेक्ट्स के साथ कैसे व्यवहार करता है, जो संदर्भ से है। मतलब है कि सभी वस्तुएं तत्काल होने के बाद अस्थिर हैं, इसका मतलब है कि आप एक वस्तु को नए तरीकों और गुणों के साथ जोड़ सकते हैं। यह महत्वपूर्ण है क्योंकि यदि आप किसी ऑब्जेक्ट को अपरिवर्तनीय बनाना चाहते हैं तो ऑब्जेक्ट को तत्काल होने के बाद बदल नहीं सकते हैं