Con mia grande sorpresa di questo codice funziona bene:Quando vengono dichiarati i riferimenti in un'istruzione switch?
int i = 2;
switch(i) {
case 1:
String myString = "foo";
break;
case 2:
myString = "poo";
System.out.println(myString);
}
Ma non dovrebbe mai essere dichiarato il riferimento String? Potrebbe essere che tutte le variabili in ogni caso vengano sempre dichiarate indipendentemente da cosa, o come viene risolto?
Non tutte le dichiarazioni fatte all'inizio del blocco {...} che le contengono? –
Penso che Jules abbia ragione. Java ha ambiti statici in modo che il flusso di controllo non influisca sulla creazione (al contrario dell'inizializzazione) della variabile. Il posto in pila viene assegnato al momento dell'inserimento nel blocco di interruttori. Ma è ancora una specie di curiosità. GCC si rifiuta di compilare codice C equivalente per lo stesso (credo) stesso motivo per cui Java rifiuta di compilare 'if (someBool) String s =" foo ";' – musiKk