मेरे आश्चर्य करने के लिए इस कोड को ठीक काम करता है:स्विच स्टेटमेंट में संदर्भ कब घोषित किए जाते हैं?
int i = 2;
switch(i) {
case 1:
String myString = "foo";
break;
case 2:
myString = "poo";
System.out.println(myString);
}
लेकिन स्ट्रिंग संदर्भ घोषित किया जा कभी नहीं करना चाहिए? क्या यह हो सकता है कि हर मामले के तहत सभी चर हमेशा घोषित किए जाते हैं कि इससे कोई फर्क नहीं पड़ता, या यह कैसे हल किया जाता है?
नहीं सभी घोषणाओं {...} उन्हें धारक ब्लॉक की शुरुआत में किया जाता है? –
मुझे लगता है कि जूल्स सही है। जावा में स्थैतिक क्षेत्र हैं इसलिए नियंत्रण प्रवाह वैरिएबल के निर्माण (प्रारंभिक के विपरीत) को प्रभावित नहीं करता है। स्विच ब्लॉक में प्रवेश करने पर स्टैक पर जगह आवंटित की जाती है। लेकिन यह अभी भी curios की तरह है। जीसीसी ने मुझे लगता है कि (अगर मुझे लगता है) के बराबर सी कोड संकलित करने से इंकार कर दिया गया है, तो जावा 'if (someBool) स्ट्रिंग एस = "foo" संकलित करने से इंकार कर देता है; ' – musiKk