我对 on 的速度很好奇switch
,认为它“非常”快,但是我有一个测试用例,似乎显示单个开关大约与 4if
次测试一样快,而我预计(没有充分的理由)它会与 1 次测试一样快。这是我写的两种比较switch
方法if
:
public static int useSwitch(int i) {
switch (i) {
case 1: return 2;
case 2: return 3;
case 3: return 4;
case 4: return 5;
case 5: return 6;
case 6: return 7;
default: return 0;
}
}
public static int useIf(int i) {
if (i == 1) return 2;
if (i == 2) return 3;
if (i == 3) return 4;
if (i == 4) return 5;
if (i == 5) return 6;
if (i == 6) return 7;
return 0;
}
这是我的测试代码:
long x = 0;
for (int i = 0; i < 999999; i++)
x += useIf(i % 7); // I use "x" so calls won't get optimized out
还有另一个相同的循环useSwitch()
在我的机器上,这些循环大约需要相同的时间才能完成,这令人惊讶。
我得出的 if 数为“4”,因为这是给定输入范围的平均值(我认为)。
如果我减少逻辑选项的数量,if
版本会明显更快。
我的问题是:
它switch
实际上不是那么快,还是在某种程度上这是一个“不公平”的测试?