Java android switch中哪个条件语句更快,或者

Java android switch中哪个条件语句更快,或者,java,android,Java,Android,这是一个基本的疑问,我没有从我的搜索中得到任何正确的答案。 在android中,哪个条件语句更快?如果发生或切换,原因是什么?。Android编码指南本身建议切换,而不是If。请澄清我的疑问。选择哪一个开关,或者如果选择? 有几个原因我会考虑使用开关而不是IF。实际上它取决于。 1。速度 switch语句可能比if更快。我之所以这样写可能是因为它取决于您的用例。它能够生成类似value->function的东西来调用您范围内的每个值,并通过一次查找找出代码路径。这通常比为if链生成的指令要快,因

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

选择哪一个开关,或者如果选择? 有几个原因我会考虑使用开关而不是IF。实际上它取决于。

1。速度

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

2。易于维护

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

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


以最具可读性的方式编写代码,让编译器处理其余部分。编译器通常会将swith语句转换为查找表,从而提供一些优势。与此相反,如果你有一些“可能”和“不可能”的条件,从技术上讲,这个问题实际上是建议问题的重复,但建议问题中的答案有点糟糕,因此我将重新回答

开关
if
快的原因是:

  • 开关
    保证要检查的表达式将只计算一次,而级联的
    if
    序列可以为每个
    if
    重新计算表达式一次,如果表达式涉及一个术语,编译器无法安全地假定它在重复计算期间保持不变,例如,当表达式涉及虚拟方法调用时就是这样

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