为什么switch语句中的case没有自己的范围?

Vin*_*igh 5 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;
}
Run Code Online (Sandbox Code Playgroud)

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

既然default是最后一个选项,并且java从左到右(从上到下)工作,我假设case 2也会声明(和任何其他情况)中的变量.

这使我认为,在选择案例之前声明的案例中,您所拥有的代码越多,实际访问该案例所需的时间与首先声明所选案例的时间相比就越.

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

use*_*421 2

Java 中的 switch 语句的模式是在 C++ 中的 switch 语句的模式之后的,而 C 中的 switch 语句的模式可能是在 B 中的 switch 语句之后的模式……BCPL(当然具有相同的单块结构)……

正如一份失传已久的 Sun 错误报告所说(关于其他事情),“原因已经消失在时间的迷雾中”。