आपका मामला
String str;
str = (str = "hello");
के बराबर है हालांकि कार्य अजीब लग रही हैं, धारणात्मक कुछ भी गलत नहीं है।
फिर भी, एक चर प्रारंभिकरण जो संदर्भ स्वयं ही एक अच्छा विचार नहीं है। कंपाइलर उन परिस्थितियों में इसे ध्वजांकित करने का प्रयास करेगा जो प्रोग्रामर त्रुटि की संभावना है; संकलक कुछ बार ऐसा करने में विफल रहता है; और कुछ अन्य समय पर भी जा सकता है।
एक स्थानीय चर के लिए एक कठोर आवश्यकता है (एक फील्ड चर से) - इसे इसके मूल्य का उपयोग करने से पहले पहले असाइन किया जाना चाहिए। उदाहरण के लिए, यह संकलित नहीं होगा, क्योंकि स्थानीय var को असाइन किए जाने से पहले पढ़ा जाता है।
String str; // local variable
str = str; // error, try to read `str` before it's assigned
फ़ील्ड चर के पास हमेशा एक डिफ़ॉल्ट प्रारंभिक मान होता है; फिर भी, स्पष्ट programer गलतियों
int x = x+1; // error. x is field variable.
लेकिन यह भयावह अगर इस तरह की जाँच में विफल रहता है नहीं है, के बाद से x
, स्पष्ट असाइनमेंट से पहले एक मूल्य 0
है
int x;
{ x=x+1; } // ok. x==0, then x==1 after assignment
लेकिन अगर x
final
है, कोड के लिए संकलक चेकों उपरोक्त विफल रहता है, क्योंकि संकलक को x
को x
पढ़ने से पहले, स्थानीय चर के लिए एक ही आवश्यकता को पढ़ने से पहले निश्चित असाइनमेंट की आवश्यकता होती है। लेकिन इस चेकिंग, धोखा दिया जा सकता है क्योंकि यह विश्लेषण और यह पूरी तरह से क्षेत्र चर के लिए
final int x = (this).x+1; // compiles!
कुछ मामलों में रोकने के लिए असंभव है, संकलक पानी में गिर जाता है, कानूनी उपयोग लैम्ब्डा
शामिल
Runnable r1 =()->System.out.println(r1); // r1 is a field variable
कुछ भी नहीं है मामलों को रोकने के इस उपयोग के मामले में अवधारणात्मक समस्याग्रस्त; इसे (this).
द्वारा भी घुमाया जा सकता है।
(str = "हैलो") स्ट्रिंग "हैलो" देता है। ग्रहण संदेश के साथ इसे हतोत्साहित करता है: "परिवर्तनीय str के असाइनमेंट का कोई प्रभाव नहीं पड़ता है" – LeTex
@LeTex I आमतौर पर ग्रहण को कठोर बनाने के लिए सेट करता है और इन्हें चेतावनियों के बजाए त्रुटियों के रूप में रिपोर्ट करता है। मुझे किसी को भी इस तरह की संरचनाओं का उपयोग करने का कोई कारण नहीं दिखता है, भले ही उन्हें जेएलएस द्वारा अनुमति दी गई हो। – biziclop
उन दिलचस्प प्रश्नों में से एक जहां आप सोच रहे हैं "इस तरह कोड लिख रहा है और क्यों"। निश्चित रूप से अकादमिक, निश्चित रूप से? – TEK