切换局部变量编译错误

时间:2013-09-06 21:45:59

标签: java switch-statement declaration

为什么这是编译错误? 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;
    }
  }
}

2 个答案:

答案 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;
    }
  }
}