संभव डुप्लिकेट:
Why are variables not local in case statements?अन्य केस ब्लॉक में उपलब्ध केस ब्लॉक में चर परिभाषित क्यों हैं?
एक चर एक गुंजाइश ब्लॉक में परिभाषित किया गया है कि यह बाहर नहीं किया जा सकता है। उदाहरण के लिए, निम्नलिखित कोड का टुकड़ा अमान्य है:
{
int anothervar = 4;
}
{
System.out.println(anothervar);
}
लेकिन जैसे एक case
ब्लॉक स्कोप अलग पैदा नहीं करता यह लग रहा है।
switch (mode) {
case ONE:
dosomething();
return;
case TWO:
int[] someints = new int[] { 2, 3, 5, 7 };
SomeObject obj = new SomeObject();
return;
case THREE:
someints = new int[] { 1, 4, 6, 8, 9 };
obj = new SomeObject();
return;
}
मैं क्यों someints
case THREE
'ब्लॉक' के अंदर घोषित करने के लिए नहीं है?
मान लीजिए mode = THREE
, तो परिवर्तनीय someints
की घोषणा कभी नहीं पहुंची है, क्योंकि case TWO
, जहां someints
घोषित किया गया है, छोड़ा गया है। या है ना? यह आंतरिक रूप से कैसे काम करता है?
(Why are variables not local in case statements? में चुना जवाब कहा गया है कि एक स्विच बयान आंतरिक jump
आदेशों का एक सेट है, लेकिन अभी भी है कि स्पष्ट नहीं होता जहां चर someints
घोषित किया जाता है।)
@Wooble: जैसा कि मेरे प्रश्न में बताया गया है, वह उत्तर 'someints' के प्रारंभिकरण की व्याख्या नहीं करता है। उत्तर में मैंने लिंक किया है, 'अगर (ए == 2) कूद ## 2;' ## 1 और ऊपर ## 2 से नीचे सबकुछ का कारण बनता है, जिसमें चर के संभावित घोषणाएं शामिल हैं। चर अभी भी कैसे घोषित किए जा रहे हैं? –