Ho una domanda pazzesca sugli switch Java.Dichiarazione e inizializzazione delle variabili all'interno degli switch Java
int key = 2;
switch (key) {
case 1:
int value = 1;
break;
case 2:
value = 2;
System.out.println(value);
break;
default:
break;
}
Scenario 1 - Quando il key
è due esso stampa con successo il valore come 2.
Scenario 2 - Quando ho intenzione di commentare value = 2
in case 2:
esso squawks dicendo che la Il valore variabile locale non può avere stato inizializzato.
Domande:
Scenario 1: se il flusso di esecuzione non va a case 1:
(quando il key = 2
), poi come fa a sapere il tipo della variabile valore come int
?
Scenario 2: se il compilatore conosce il tipo della variabile di valore come int
, deve avere accesso all'espressione int value = 1;
in case 1:
. (Dichiarazione e inizializzazione). Quindi, perché sqawrk Quando ho intenzione di commentare value = 2
in case 2:
, dicendo il Il valore della variabile locale potrebbe non essere stato inizializzato.
Non è una domanda folle, è una buona domanda. – biziclop
Possibile duplicato dell'ambito [Variable's scope in switch case] (http://stackoverflow.com/questions/3894119/variables-scope-in-a-switch-case) –
@PhilippeCarriere In realtà, penso che dovrebbe essere al contrario - la risposta qui è migliore (anche se il post è più recente) poiché c'è un riferimento diretto al JLS e riassume bene il problema trattato in diverse risposte in quel post. [Vedi anche] (http://meta.stackoverflow.com/questions/251938/should-i-flag-a-question-as-duplicate-if-it-has-received-better-answers). – Tunaki