परिवर्तनीय/अपरिवर्तनीय वस्तुएं क्या हैं और वे किस लिए हैं?  - 1

"हाय, अमीगो!"

"हाय, बिलाबो!"

"आज बिलाबो आपको परिवर्तनशील और अपरिवर्तनीय वस्तुओं के बारे में बताएगा ।

"ऑब्जेक्ट्स जिन्हें आप बनाए जाने के बाद बदल सकते हैं उन्हें म्यूटेबल कहा जाता है ।"

"जिन वस्तुओं को बनाने के बाद बदला नहीं जा सकता उन्हें अपरिवर्तनीय कहा जाता है ।"

"क्या निर्धारित करता है कि क्या मैं किसी वस्तु को बदल सकता हूँ?"

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

"और इसका क्या मतलब होगा?"

"अपरिवर्तनीय वस्तुओं में कई उपयोगी गुण होते हैं, लेकिन मैं दो को उजागर करूँगा जो लगभग सभी अपरिवर्तनीय वस्तुओं के लिए सामान्य हैं:"

1) परिवर्तनीय वस्तुओं की तुलना में अपरिवर्तनीय वस्तुओं को लागू करना बहुत आसान है।

2) अपरिवर्तनीय वस्तुओं को एक साथ कई थ्रेड्स में स्वतंत्र रूप से उपयोग किया जा सकता है।

"जब कोई डेवलपर एक अपरिवर्तनीय वर्ग लिखने का निर्णय लेता है, तो वह आम तौर पर कक्षा के एक परिवर्तनीय और अपरिवर्तनीय दोनों संस्करण बनाता है।"

"लेकिन एक के बजाय दो वर्ग लिखने का क्या मतलब है?"

"कभी-कभी यह इसके लायक होता है जब किसी ऑब्जेक्ट का एक अपरिवर्तनीय संस्करण एक परिवर्तनीय से कहीं अधिक सरल/तेज होगा। इसलिए, वे दो संस्करण बनाते हैं। यह ऐरेलिस्ट और लिंक्डलिस्ट की तरह है: दोनों सूचियां हैं, लेकिन विशिष्ट उद्देश्यों के लिए अनुकूलित किया गया है, और दूसरा दूसरों के लिए।"

"यह पहले से ही अधिक समझ में आता है।"

"विशुद्ध रूप से अपरिवर्तनीय वर्ग भी हैं, जिनका कोई परिवर्तनशील संस्करण नहीं है।"

"लेकिन क्या होगा अगर मुझे उन वस्तुओं में से किसी एक में कुछ बदलने की ज़रूरत है? आप वास्तव में एक अपरिवर्तनीय वस्तु के साथ क्या कर सकते हैं?"

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

"यहां कुछ उदाहरण दिए गए हैं:"

जावा कोड विवरण
String s = "london";
String s2 = s.toUpperCase();
नतीजतन, एस में स्ट्रिंग «लंदन» और एस 2 में «लंदन» शामिल है
Integer i = 1;
Integer j = i;
j++;
यहाँ वास्तव में क्या होता है:
Integer i = new Integer(1);
पूर्णांक जे = मैं;
जे = नया पूर्णांक (i.getInt () + 1);

"स्ट्रिंग क्लास एक अपरिवर्तनीय वर्ग है। सभी स्ट्रिंग ऑब्जेक्ट्स अपरिवर्तनीय हैं, लेकिन यह हमें उनके साथ काम करने से नहीं रोकता है। उदाहरण के लिए, स्ट्रिंग क्लास की toUpperCase () विधि स्ट्रिंग को अपरकेस में परिवर्तित करती है (यानी सभी छोटे अक्षरों को बदल देती है) बड़े अक्षरों के साथ)। हालाँकि, यह विधि स्वयं स्ट्रिंग को नहीं बदलती है, इसके बजाय यह एक नया स्ट्रिंग लौटाती है। यह नया स्ट्रिंग पहले के समान है, सिवाय इसके कि सभी वर्ण अपरकेस (बड़े अक्षर) हैं।

"पूर्णांक वर्ग भी एक अपरिवर्तनीय वर्ग है। सभी पूर्णांक वस्तुएँ अपरिवर्तनीय हैं। हर बार जब हम एक पूर्णांक वस्तु को बदलते हैं, तो हम वास्तव में एक नई वस्तु बना रहे होते हैं।"

"कितना दिलचस्प है! हुर्रे, बिलाबो।"

"हुर्रे फॉर मी! हुर्रे फॉर बिलाबो!"