2009-05-17 9 views
23

निम्नलिखित बयानोंस्ट्रिंग और अंतिम

String name = "Tiger"; 

final String name ="Tiger"; 

हालांकि String वर्ग final वर्ग है, कारण है कि हम अंतिम के रूप में एक स्ट्रिंग "लगातार" चर बनाने के लिए की जरूरत है में क्या अंतर है? इस संदर्भ में

+4

यह स्ट्रिंग जो यहाँ अंतिम बना है, स्ट्रिंग ही नहीं करने के लिए संदर्भ है। –

उत्तर

48

final का अर्थ है कि परिवर्तनीय name केवल एक बार असाइन किया जा सकता है। एक अलग String ऑब्जेक्ट को फिर से असाइन करना एक संकलन त्रुटि में परिणाम देता है।

मुझे लगता है कि भ्रम की स्थिति यहां का स्रोत है कि final कीवर्ड कई अलग अलग संदर्भों में इस्तेमाल किया जा सकता है:

  • अंतिम वर्ग: कक्षा subclassed नहीं किया जा सकता।
  • अंतिम विधि: विधि को ओवरराइड नहीं किया जा सकता है।
  • अंतिम चर: चर केवल एक बार असाइन किया जा सकता है।

प्रत्येक मामले पर उदाहरणों के लिए final in Java पर विकिपीडिया लेख देखें।

+0

याद रखें 'अंतिम' अन्य धागे के लिए सुरक्षित प्रकाशन के बारे में भी है, हालांकि (नीचे मेरा उत्तर देखें)। –

1

आप अंतिम के साथ अपरिवर्तनीय भ्रमित हैं।

स्ट्रिंग, इंटीगर और लांग की तरह, एक अपरिवर्तनीय वर्ग है जिसमें आंतरिक डेटा को encapsulation के माध्यम से संशोधन से संरक्षित किया जाता है।

हालांकि, अयमान ने कहा, अंतिम स्ट्रिंग को पॉइंटर को संदर्भित करता है।

2

याद रखें कि Java final keyword इस मामले में दो उद्देश्यों में कार्य करता है:

  • इसका मतलब है कि संदर्भ के लिए एक और String-- यानी आप बाद में ऐसा नहीं कर सकते "नाम = ..." सेट नहीं किया जा सकता है;
  • लेकिन महत्वपूर्ण बात, इसका मतलब है कि संदर्भ सही ढंग से अन्य धागे (अधिक जानकारी के लिए जुड़े हुए लेख, या गोएज़ एट अल "अभ्यास में जावा संगामिति" के रूप में इस तरह के काम करता है के लिए प्रकाशित किया जाता है।
+0

यूप, अंतिम जावा अनुप्रयोगों में नहीं, इसलिए अंतिम प्रोग्राम अनुप्रयोगों में नहीं, क्योंकि जावा प्रोग्रामर उत्परिवर्तन को गले लगाते हैं। – egaga

4

"अंतिम "दो मामलों में अलग अलग बातें मतलब है।

java.lang.String वर्ग अंतिम है। इसका मतलब यह है कि आप इसे से विरासत नहीं कर सकते।

चर" नाम ", अंतिम है जिसका अर्थ है कि आप कर सकते हैं ' स्ट्रिंग के एक अलग उदाहरण को इंगित करने के लिए इसे बदलें। इसलिए एक गैर-अंतिम स्ट्रिंग चर स्थिर नहीं है, क्योंकि आप इसे दो अलग-अलग समय पर पढ़ सकते हैं और अलग-अलग मान प्राप्त कर सकते हैं।

जैसा होता है, जावा स्ट्रिंग ऑब्जेक्ट्स भी अपरिवर्तनीय हैं। इसका अर्थ यह है कि आप उस मान को संशोधित नहीं कर सकते जो एक विशेष स्ट्रिंग ऑब्जेक्ट का प्रतिनिधित्व करता है। किसी सरणी के साथ इसकी तुलना करें - आप किसी ऑब्जेक्ट ऑब्जेक्ट के पहले तत्व को एक अलग ऑब्जेक्ट से प्रतिस्थापित कर सकते हैं, लेकिन आप एक स्ट्रिंग ऑब्जेक्ट के पहले अक्षर को एक अलग चार से प्रतिस्थापित नहीं कर सकते हैं। यही कारण है कि String.replace() एक नई स्ट्रिंग देता है - यह पुराने को संशोधित नहीं कर सकता है।

एक कारण है कि स्ट्रिंग अंतिम है स्ट्रिंग के उप-वर्ग के उदाहरण को रोकने के लिए, जो स्ट्रिंग के स्थान पर पारित होने वाले उत्परिवर्तनीय व्यवहार को लागू करता है।

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

2

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 
0

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

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

स्रोत: Final Keyword in Java

संबंधित मुद्दे