【发布时间】:2025-12-20 19:55:06
【问题描述】:
考虑这段代码:
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 相比,实际访问该案例所需的时间就越长选择的案例首先被宣布。
switch 语句以这种方式工作是否有特定原因?如果有很多情况,最好使用if-else 而不是 switch 语句? (通话处理时间,纳秒)
【问题讨论】:
-
设计决策。简化通过案例。将
{}添加到范围案例。 -
switch (...) { all cases belong to this context },那么你也可以使用case ...: { this case now has own context };) -
“优化”不适用于此处。任何一种结构都可以同样有效地实施。字节码/VM 根本不像程序员那样关心局部变量。 (即,Java 不会“执行”变量声明。)
-
如果您的交换机中有足够多的案例来改变运行时间,那么一定是出了严重的问题。但是,开关通常比 if 链更快,因为它们编译为精心制作的查找表,并且不作为决策序列进行评估。 (这就是为什么你不能打开比较,而只能打开值)
标签: java switch-statement micro-optimization