Reputation: 14399
To my surprise this code works fine:
int i = 2;
switch(i) {
case 1:
String myString = "foo";
break;
case 2:
myString = "poo";
System.out.println(myString);
}
But the String reference should never be declared? Could it be that all variables under every case always are declared no matter what, or how is this resolved?
Upvotes: 7
Views: 107
Reputation: 6712
The scope of the myString declaration is the switch block (where the { character is). If you were to write it like this, the declaration would be per-case:
int i = 2;
switch(i) {
case 1: {
String myString = "foo";
break;
}
case 2: {
String myString = "poo";
System.out.println(myString);
}
}
Upvotes: 3
Reputation: 55082
Well, it's about brackets (i.e. scope).
It's better practice, arguably, to write your statements like so:
int i = 2;
switch(i) {
case 1: {
String myString = "foo";
break;
}
case 2: {
myString = "poo";
System.out.println(myString);
}
}
(I'm not near a Java compiler right now, but that shouldn't compile).
Upvotes: 7