首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >开关似乎比如果

开关似乎比如果
EN

Stack Overflow用户
提问于 2012-12-30 06:32:53
回答 4查看 1.7K关注 0票数 12

我对switch上的速度很好奇,认为它“非常”快,但我有一个测试用例,它似乎表明一个开关大约和4个if测试一样快,而我预计(没有确凿的理由)它会和一个测试一样快。下面是我为比较switchif而编写的两种方法

代码语言:javascript
运行
复制
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;
}

这是我的测试代码:

代码语言:javascript
运行
复制
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()的另一个相同的循环

在我的机器上,这些循环几乎是同时完成的,这是一个惊喜。

我得出的ifs数为"4",因为这是给定输入范围的平均值(我认为)。

如果我减少逻辑选项的数量,那么if版本的速度明显更快。

我的问题是:

switch实际上没有那么快,还是在某种程度上这是一个“不公平”的测试?

EN

Stack Overflow用户

发布于 2012-12-30 11:49:20

由于您的代码可能会或可能不会根据JIT的智能程度而被消除,所以您可能已经确定if语句比开关更容易消除。这并不奇怪,因为很多语句更有可能被删除,例如断言和调试检查。

票数 1
EN
查看全部 4 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14088824

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档