【问题标题】:if else vs switch performance in javaif else 与 java 中的 switch 性能
【发布时间】:2015-10-10 08:29:14
【问题描述】:

我想知道使用 if 语句或 switch 之间是否有任何效率差异。例如:

if(){
//code
}
else if(){
//code
}
else{
//code
}

我相信即使第一个 if 语句为真,程序也需要检查所有 if 语句。

switch(i){

case 1:
//code
break;
case 2:
//code
break;

但是在switch里面,有一个break命令。我的接近正确吗?如果不是,您能解释一下它们之间的效率差异吗?

【问题讨论】:

标签: java if-statement switch-statement


【解决方案1】:

Switch 性能优于if else,因为在切换的情况下会有一次评估。一旦它评估了开关,它就知道需要执行哪种情况,但在if else 的情况下,它必须经过所有条件以防最坏的情况。

列表条件越长,切换性能越好,但对于较短的列表(只有两个条件),它也可能更慢

来自Why switch is faster than if

通过 switch,JVM 加载要比较的值并迭代 查找匹配的值表,在大多数情况下更快

【讨论】:

  • 在你衡量之前谈论性能提升是不正确的。在大多数应用程序中,性能瓶颈会出现在任何地方,但不在 IF 或 SWITCH 中。
  • 好吧,我们不必重新发明轮子,当它已经完成时,这里 OP 询问具体的 if elseswitch 而不是性能方面的其他内容
  • 当然。没有保证的收益。在某些情况下,IF 会比 SWITCH 更快。在其他情况下 - 反之亦然。所有性能问题都需要测量。
  • @ursa 问题不在于 OP 的瓶颈在哪里。它是关于哪个更快:如果或切换。如果您对问题有评论,在问题下方发布,
  • @ursa 是正确的。在很多情况下,switch 的表现不会优于 if/elseswitch 增加了方法的大小,使其不太可能被内联。如果您知道哪些分支最有可能被采用并且可以相应地构建它,if/else 的性能可能会更好。使用switch 也可能以微妙的方式影响分支预测。测试和测量。
【解决方案2】:

Switch 更快。

想象你在一个十字路口,有很多条路。 有了switch,你第一时间就走对了。

使用if,那么您必须尝试所有路径才能找到正确的路径。

尽可能使用switch

当然,对于计算机,这种差异非常小,您甚至都不会注意到。但是,是的,你明白了。

【讨论】:

    【解决方案3】:

    我认为代码很清楚。使用 if,您必须逐个检查每个案例(在最坏的情况下,最后一次返回会返回结果)。使用 switch,某种类似于特殊字节码的检查并跳转到正确的大小写返回。所以 switch 比 if 语句要快一点。但是,我认为我们需要专注于我们实现的方式,以便于阅读。在一些简单的情况下,if 也是编写代码的一种选择。

    【讨论】:

      猜你喜欢
      • 2016-08-07
      • 1970-01-01
      • 2011-01-06
      • 1970-01-01
      • 2012-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多