关于java:在android开关中哪个条件语句更快或者如果

Which condition statement is faster in android switch or if

本问题已经有最佳答案,请猛点这里访问。

这是一个基本的疑问,我没有从我的搜索中得到任何正确的答案。在Android中,哪个条件语句更快?如果或切换,原因是什么?.android编码指南本身建议使用switch而不是if。请澄清我的疑问。


选择开关还是如果?

有几个原因我会考虑使用一个开关,而不是如果。实际上,这取决于。

1。速度

switch语句可能比if更快。我写这篇文章可能是因为它取决于您的用例,它能够生成类似于value->函数的东西来调用您范围内的每个值,并通过一次查找找出代码路径。这通常比为if链生成的指令快,因为if中的每个表达式都是单独计算的。

2。易于维护

当你必须组合箱子时,开关看起来更干净。如果会很快失控。与if相比,在switch中很容易添加新案例。

更重要的一点是,else或switch都不是直接汇编语句。所以这取决于编译器将代码转换为程序集的方式。

以最可读的方式编写代码,让编译器处理其余的代码。编译器通常将swith语句转换为查找表,这会带来一些优势。相反,如果你有一些"可能"和"不可能"的条件


从技术上讲,这个问题实际上是建议问题的副本,但是建议问题中的答案有点不好,所以我会重新回答。

switchif快的原因是:

  • switch保证要检查的表达式只计算一次,而一个级联if序列可以为每个if重新计算表达式一次,如果表达式涉及一个术语,编译器不能安全地假定它在重复计算过程中保持不变,例如,当简单来说,表达式涉及一个虚拟方法调用。

  • switch是使用一个特殊的字节码来实现的,它是由虚拟机以非常有效的方式实现的。我不能保证VM究竟是如何实现这个字节码的,但是我在几十年前见过C++编译器在切换标签值表上执行二进制搜索一样聪明,而且我没有理由相信现代VM至少不那么聪明。