À ma grande surprise ce code fonctionne très bien:Quand les références sont-elles déclarées dans une instruction switch?
int i = 2;
switch(i) {
case 1:
String myString = "foo";
break;
case 2:
myString = "poo";
System.out.println(myString);
}
Mais la référence de chaîne ne doit jamais être déclarée? Se pourrait-il que toutes les variables dans chaque cas soient toujours déclarées quoi que ce soit, ou comment cela est-il résolu?
Toutes les déclarations faites au début du bloc {...} ne les contiennent-elles pas? –
Je pense que Jules a raison. Java a des étendues statiques donc le flux de contrôle n'influence pas la création (par opposition à l'initialisation) de la variable. L'emplacement sur la pile est attribué lors de l'entrée dans le bloc de commutation. Mais c'est toujours une sorte de curiosité. GCC refuse de compiler le code C équivalent pour (je pense) la même raison que Java refuse de compiler 'if (someBool) String s =" foo ";' – musiKk