निम्नलिखित बयानोंस्ट्रिंग और अंतिम
String name = "Tiger";
final String name ="Tiger";
हालांकि String
वर्ग final
वर्ग है, कारण है कि हम अंतिम के रूप में एक स्ट्रिंग "लगातार" चर बनाने के लिए की जरूरत है में क्या अंतर है? इस संदर्भ में
निम्नलिखित बयानोंस्ट्रिंग और अंतिम
String name = "Tiger";
final String name ="Tiger";
हालांकि String
वर्ग final
वर्ग है, कारण है कि हम अंतिम के रूप में एक स्ट्रिंग "लगातार" चर बनाने के लिए की जरूरत है में क्या अंतर है? इस संदर्भ में
final
का अर्थ है कि परिवर्तनीय name
केवल एक बार असाइन किया जा सकता है। एक अलग String
ऑब्जेक्ट को फिर से असाइन करना एक संकलन त्रुटि में परिणाम देता है।
मुझे लगता है कि भ्रम की स्थिति यहां का स्रोत है कि final
कीवर्ड कई अलग अलग संदर्भों में इस्तेमाल किया जा सकता है:
प्रत्येक मामले पर उदाहरणों के लिए final in Java पर विकिपीडिया लेख देखें।
याद रखें 'अंतिम' अन्य धागे के लिए सुरक्षित प्रकाशन के बारे में भी है, हालांकि (नीचे मेरा उत्तर देखें)। –
आप अंतिम के साथ अपरिवर्तनीय भ्रमित हैं।
स्ट्रिंग, इंटीगर और लांग की तरह, एक अपरिवर्तनीय वर्ग है जिसमें आंतरिक डेटा को encapsulation के माध्यम से संशोधन से संरक्षित किया जाता है।
हालांकि, अयमान ने कहा, अंतिम स्ट्रिंग को पॉइंटर को संदर्भित करता है।
याद रखें कि Java final keyword इस मामले में दो उद्देश्यों में कार्य करता है:
यूप, अंतिम जावा अनुप्रयोगों में नहीं, इसलिए अंतिम प्रोग्राम अनुप्रयोगों में नहीं, क्योंकि जावा प्रोग्रामर उत्परिवर्तन को गले लगाते हैं। – egaga
"अंतिम "दो मामलों में अलग अलग बातें मतलब है।
java.lang.String वर्ग अंतिम है। इसका मतलब यह है कि आप इसे से विरासत नहीं कर सकते।
चर" नाम ", अंतिम है जिसका अर्थ है कि आप कर सकते हैं ' स्ट्रिंग के एक अलग उदाहरण को इंगित करने के लिए इसे बदलें। इसलिए एक गैर-अंतिम स्ट्रिंग चर स्थिर नहीं है, क्योंकि आप इसे दो अलग-अलग समय पर पढ़ सकते हैं और अलग-अलग मान प्राप्त कर सकते हैं।
जैसा होता है, जावा स्ट्रिंग ऑब्जेक्ट्स भी अपरिवर्तनीय हैं। इसका अर्थ यह है कि आप उस मान को संशोधित नहीं कर सकते जो एक विशेष स्ट्रिंग ऑब्जेक्ट का प्रतिनिधित्व करता है। किसी सरणी के साथ इसकी तुलना करें - आप किसी ऑब्जेक्ट ऑब्जेक्ट के पहले तत्व को एक अलग ऑब्जेक्ट से प्रतिस्थापित कर सकते हैं, लेकिन आप एक स्ट्रिंग ऑब्जेक्ट के पहले अक्षर को एक अलग चार से प्रतिस्थापित नहीं कर सकते हैं। यही कारण है कि String.replace() एक नई स्ट्रिंग देता है - यह पुराने को संशोधित नहीं कर सकता है।
एक कारण है कि स्ट्रिंग अंतिम है स्ट्रिंग के उप-वर्ग के उदाहरण को रोकने के लिए, जो स्ट्रिंग के स्थान पर पारित होने वाले उत्परिवर्तनीय व्यवहार को लागू करता है।
लेकिन क्या आप किसी विशेष वस्तु को संशोधित कर सकते हैं, और क्या आप एक चर के लिए एक अलग वस्तु असाइन कर सकते हैं, पूरी तरह से अलग अवधारणाएं हैं। एक स्ट्रिंग ऑब्जेक्ट्स की एक संपत्ति है, और दूसरा स्ट्रिंग वेरिएबल्स की एक संपत्ति है, जो स्ट्रिंग ऑब्जेक्ट्स के संदर्भ हैं।
The final word on the final keyword पर एक नज़र डालें।
String name = "scott";
name = "tiger"; // OK
final String gender = "male";
gender = "female"; // won't compile you cannot reassign gender cause it's final
एक चर अंतिम तो है कि चर का मान नहीं बदला जा सकता अर्थात अंतिम कीवर्ड के रूप में चिह्नित किया जाता है तो जब एक चर के साथ प्रयोग किया यह एक निरंतर बना देता है। और यदि आप अपने प्रोग्राम के दौरान उस चर के मान को बदलने का प्रयास करते हैं तो संकलक आपको एक त्रुटि देगा।
नोट: आप अंतिम के रूप में एक संदर्भ प्रकार के चर चिह्नित करते हैं, कि चर किसी अन्य वस्तु का उल्लेख नहीं कर सकते हैं। हालांकि, आप ऑब्जेक्ट की सामग्री बदल सकते हैं, क्योंकि केवल संदर्भ ही अंतिम है।
स्रोत: Final Keyword in Java
यह स्ट्रिंग जो यहाँ अंतिम बना है, स्ट्रिंग ही नहीं करने के लिए संदर्भ है। –