为什么转换语句中的案例都有自己的范围?

时间:2014-10-14 04:41:37

标签: java switch-statement micro-optimization

考虑以下代码:

int num = 0;

switch(num) {
   case 1:
      boolean bool = false;
      break;
   case 2:
      String one;
      String two;
      String three;
      //..simulating lots of vars
      break;
   default:
      bool = true;
      System.out.println(bool);
      break;
}

由于我们被允许引用在另一个案例中声明的变量,这意味着即使未选择case 1,仍然会声明boolean bool

由于default是最后一个选项,而java从左到右(从上到下)工作,我假设case 2(和任何其他情况)中的变量也将被声明

这让我觉得在选择案例之前声明的案例中你拥有的代码越多,实际访问案例所需的时间越长 与if相比所选案件首先被宣布。

有没有特定的原因切换语句以这种方式工作?如果有很多案例,最好不要使用if-else而不是切换语句? (谈论处理时间,纳秒)

2 个答案:

答案 0 :(得分:2)

{}表示范围,您可以以任何您喜欢的方式使用它。

在switch语句中:

switch (...) {
}

{}内的所有内容都属于同一范围。 如果您希望案例具有自己的范围,则需要使用{},如下所示:

switch (...) {
    case 0: {
    }
    break;
    case 1: {
    }
    break;
}

同样,您可以使用{}在范围内声明范围,如下所示:

{
      {
          int i;
      }
      {
          int i;
      }
}

答案 1 :(得分:2)

在C语言中的switch语句在C语言中的switch语句可能在B ... BCPL(当然具有相同的单块结构)中的switch语句之后被模式化之后,用Java模式化了Java中的switch语句...

作为一个长期失踪的Sun bug报告(关于其他事情),'原因在时间的迷雾中消失'。