अपरिवर्तनीय प्रकार आम तौर पर एक अच्छी बात कर रहे हैं: (! आप कुछ है कि नहीं बदल सकते लॉक करने के लिए की जरूरत नहीं है)
- वे संगामिति लिए बेहतर काम
- वे त्रुटियों को कम: परिवर्तनशील वस्तुओं जोखिम रहता है जब आप इसकी अपेक्षा नहीं करते हैं तो इसे बदलने के लिए जो सभी प्रकार की अजीब बग ("दूरी पर कार्रवाई")
- उन्हें सुरक्षित रूप से साझा किया जा सकता है (यानी एक ही ऑब्जेक्ट के एकाधिक संदर्भ) जो स्मृति खपत को कम कर सकते हैं और बेहतर कर सकते हैं कैश उपयोग।
- शेयरिंग एक बहुत ही सस्ते ओ (1) ऑपरेशन की प्रतिलिपि बनाता है जब यह ओ (एन) होगा यदि आपको एक म्यूटेबल ऑब्जेक्ट की रक्षात्मक प्रति लेनी है। यह एक बड़ी बात है क्योंकि नकल एक अविश्वसनीय रूप से आम आपरेशन (जैसे जब भी आप मापदंडों के आसपास पास करना चाहते हैं ....)
नतीजतन, यह तार अपरिवर्तनीय बनाने के लिए एक बहुत ही उचित भाषा डिजाइन पसंद है है।
कुछ भाषाओं (विशेष रूप से कार्यात्मक भाषाएं जैसे हास्केल और क्लोजर) आगे बढ़ती हैं और सब कुछ अपरिवर्तनीय बनाती हैं। यदि आप अपरिवर्तनीयता के लाभ में रूचि रखते हैं तो यह enlightening video बहुत अधिक दिखता है।
अपरिवर्तनीय प्रकार के लिए मामूली कमियां के एक जोड़े हैं:
- संचालन, जो एक बदली हुई स्ट्रिंग संयोजन की तरह और अधिक महंगा है क्योंकि आप नई वस्तुओं का निर्माण करने की आवश्यकता है बनाएँ। आम तौर पर लागत दो (अपरिवर्तनीय स्ट्रिंग्स को संयोजित करने के लिए ओ (एन + एम) होती है, हालांकि यदि आप पेड़-आधारित स्ट्रिंग डेटा स्ट्रक्चर का उपयोग करते हैं तो Rope जैसे यह ओ (लॉग (एम + एन)) के रूप में कम हो सकता है। इसके अलावा यदि आप वास्तव में स्ट्रिंग्स को कुशलता से जोड़ना चाहते हैं तो आप हमेशा जावा के StringBuilder जैसे विशेष टूल का उपयोग कर सकते हैं।
- बड़ी स्ट्रिंग पर एक छोटे से बदलाव के परिणामस्वरूप बड़ी स्ट्रिंग की पूरी तरह से नई प्रतिलिपि बनाने की आवश्यकता हो सकती है, जो स्पष्ट रूप से स्मृति खपत को बढ़ाता है। ध्यान दें कि यह आमतौर पर कचरा-एकत्रित भाषाओं में एक बड़ा मुद्दा नहीं है क्योंकि पुरानी प्रति को कचरा इकट्ठा किया जाएगा यदि आप इसका संदर्भ नहीं रखते हैं।
कुल मिलाकर, अपरिवर्तनीयता के फायदे मामूली नुकसान से काफी अधिक हैं। यहां तक कि यदि आप केवल प्रदर्शन में रूचि रखते हैं, तो प्रतिलिपि के फायदे और सस्तीता की सस्तीता आम तौर पर लॉकिंग और रक्षात्मक प्रतिलिपि के साथ उत्परिवर्तनीय लोगों की तुलना में अपरिवर्तनीय तारों को अधिक प्रदर्शनकारी बनाती है।
http://stackoverflow.com/questions/2365272/why-net-string-is-immutable – Mehrdad
सी ++ की 'std :: string' * अपरिवर्तनीय नहीं है। – fredoverflow