परिवर्तनीय/अपरिवर्तनीय वस्तू काय आहेत आणि त्या कशासाठी आहेत?  - १

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

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

"आज बिलाबो तुम्हाला परिवर्तनीय आणि अपरिवर्तनीय वस्तूंबद्दल सांगेल .

"वस्तू तयार केल्यानंतर तुम्ही बदलू शकता त्यांना म्यूटेबल म्हणतात ."

"ज्या वस्तू तयार झाल्यानंतर बदलता येत नाहीत त्यांना अपरिवर्तनीय म्हणतात ."

"मी एखादी वस्तू बदलू शकतो की नाही हे काय ठरवते?"

"नवीन वर्गाचा लेखक त्या वर्गाच्या वस्तूंना अपरिवर्तनीय बनवू शकतो. उदाहरणार्थ, जर तुम्ही सर्व सेटर खाजगी केले, तर ऑब्जेक्टमध्ये फक्त कन्स्ट्रक्टर आणि गेटर्स असतील; म्हणजे ते तयार झाल्यानंतर बदलणे अशक्य होईल. ."

"आणि त्याचा अर्थ काय असेल?"

"अपरिवर्तनीय वस्तूंमध्ये बरेच उपयुक्त गुणधर्म आहेत, परंतु मी दोन हायलाइट करेन जे जवळजवळ सर्व अपरिवर्तनीय वस्तूंसाठी सामान्य आहेत:"

1) अपरिवर्तनीय वस्तू बदलण्यायोग्य वस्तूंपेक्षा अंमलात आणणे खूप सोपे आहे.

2) अपरिवर्तनीय वस्तू एकाच वेळी अनेक थ्रेड्सवर मुक्तपणे वापरल्या जाऊ शकतात.

"जेव्हा विकसक एक अपरिवर्तनीय वर्ग लिहिण्याचा निर्णय घेतो, तेव्हा तो सामान्यतः वर्गाची परिवर्तनीय आणि अपरिवर्तनीय आवृत्ती बनवतो."

"पण एका ऐवजी दोन वर्ग लिहिण्यात काय फायदा?"

"कधीकधी एखाद्या वस्तूची अपरिवर्तनीय आवृत्ती बदलण्यायोग्य आवृत्तीपेक्षा खूपच सोपी/वेगवान असेल तेव्हा ते फायदेशीर ठरते. म्हणून, ते दोन आवृत्त्या बनवतात. ते ArrayList आणि LinkedList सारखे आहे: दोन्ही याद्या आहेत, परंतु एक विशिष्ट हेतूंसाठी ऑप्टिमाइझ केलेली आहे, आणि दुसरा इतरांसाठी."

"ते आधीच अधिक अर्थपूर्ण आहे."

"असेही पूर्णपणे अपरिवर्तनीय वर्ग आहेत, ज्यात बदल करण्यायोग्य आवृत्ती नाही."

"पण जर मला त्या वस्तूंपैकी एकामध्ये काहीतरी बदलण्याची गरज असेल तर? तुम्ही अपरिवर्तनीय वस्तूचे प्रत्यक्षात काय करू शकता?"

"सामान्यतः, अपरिवर्तनीय वर्गांमध्ये विविध पद्धती असतात ज्या ऑब्जेक्ट बदलल्याप्रमाणे कार्य करतात, परंतु या पद्धती केवळ ऑब्जेक्ट बदलण्याऐवजी नवीन ऑब्जेक्ट तयार करतात आणि परत करतात."

"येथे काही उदाहरणे आहेत:"

जावा कोड वर्णन
String s = "london";
String s2 = s.toUpperCase();
परिणामी, s मध्ये «london» स्ट्रिंग आहे आणि s2 मध्ये «LONDON» आहे
Integer i = 1;
Integer j = i;
j++;
येथे खरोखर काय होते:
पूर्णांक i = नवीन पूर्णांक(1);
पूर्णांक j = i;
j = नवीन पूर्णांक(i.getInt()+1);

"स्ट्रिंग क्लास हा एक अपरिवर्तनीय वर्ग आहे. सर्व स्ट्रिंग ऑब्जेक्ट्स अपरिवर्तनीय आहेत, परंतु ते आपल्याला त्यांच्यासोबत काम करण्यापासून रोखत नाही. उदाहरणार्थ, स्ट्रिंग क्लासची toUpperCase () पद्धत स्ट्रिंगला अपरकेसमध्ये रूपांतरित करते (म्हणजे सर्व लहान अक्षरे बदलते. कॅपिटल अक्षरांसह). तथापि, ही पद्धत स्वतः स्ट्रिंग बदलत नाही, त्याऐवजी ती एक नवीन स्ट्रिंग परत करते. ही नवीन स्ट्रिंग पहिल्यासारखीच आहे वगळता सर्व अक्षरे अपरकेस (कॅपिटल अक्षरे) आहेत."

"पूर्णांक वर्ग हा देखील एक अपरिवर्तनीय वर्ग आहे. सर्व पूर्णांक वस्तू अपरिवर्तनीय आहेत. प्रत्येक वेळी जेव्हा आपण पूर्णांक ऑब्जेक्ट बदलतो तेव्हा आपण प्रत्यक्षात एक नवीन ऑब्जेक्ट तयार करत असतो."

"किती मनोरंजक! हुर्रे, बिलाबो."

"माझ्यासाठी हुर्रे! बिलाबोसाठी हुर्रे!"