为什么这是编译错误? Java无法同时达到bar
的声明。
import java.util.Random;
public class SwitchTest {
public static void main(String[] args) {
Random r = new Random();
int foo = r.nextInt(2);
switch(foo) {
case 0:
int bar = r.nextInt(10);
System.out.println(bar);
break;
case 1:
int bar = r.nextInt(10) + 10; // Doesn't compile!!
System.out.println(bar);
break;
}
}
}
答案 0 :(得分:6)
它们都在相同的词法范围内,这与执行可达性不同。
在每个case
内的代码周围加上大括号,它会起作用。
答案 1 :(得分:3)
您也可以在范围之外声明栏
import java.util.Random;
public class SwitchTest {
public static void main(String[] args) {
Random r = new Random();
int foo = r.nextInt(2);
int bar; //bar is out of the switch scope
switch(foo) {
case 0:
bar = r.nextInt(10);
System.out.println(bar);
break;
case 1:
bar = r.nextInt(10) + 10;
System.out.println(bar);
break;
}
}
}