【发布时间】:2017-05-27 06:26:55
【问题描述】:
这是一个基本的疑问,我没有从我的搜索中得到任何正确的答案。 在android中哪个条件语句更快? If 或 Switch 又是什么原因? Android 编码指南本身建议使用 Switch 而不是 If。请澄清我的疑问。
【问题讨论】:
这是一个基本的疑问,我没有从我的搜索中得到任何正确的答案。 在android中哪个条件语句更快? If 或 Switch 又是什么原因? Android 编码指南本身建议使用 Switch 而不是 If。请澄清我的疑问。
【问题讨论】:
我会考虑使用开关而不是 if 的原因有几个。实际上这取决于。
1.速度
switch 语句可能比 if 更快。我写可能是因为它取决于您的用例。它能够生成类似于 value -> function 的东西来调用您范围内的每个值并使用一次查找找出代码路径。这通常比为 if 链生成的指令要快,因为 if 中的每个表达式都是单独评估的。
2。易于维护
当您必须合并案例时,开关看起来更干净。如果很快就会失控。 与 if 相比,易于在 switch 中添加新案例。
更重要的一点是 if-else 或switch 都不是直接汇编语句。所以这取决于编译器将代码转换为汇编的方式。
以最易读的方式编写代码,让编译器负责其余的工作。编译器通常将 swith 语句转换为查找表,从而提供一些优势。相反,如果您有一些“可能”和“不太可能”的情况
【讨论】:
从技术上讲,这个问题实际上是建议问题的重复,但是建议问题中的答案有点糟糕,所以我会重新回答。
switch之所以比if快是因为:
switch 保证要检查的表达式将只计算一次,而级联的 ifs 序列可能会为每个 if 重新计算一次表达式,如果表达式包含以下术语编译器不能安全地假设它在重复计算期间会保持不变,例如,当表达式涉及虚拟方法调用时。
switch 是使用特殊字节码实现的,该字节码由 VM 以非常有效的方式实现。我不能保证任何 VM 是如何实现这个字节码的,但是我已经看到 C++ 编译器几十年前做的事情就像对开关标签值表执行二进制搜索一样聪明,我没有理由相信现代 VM至少没有那么聪明。
【讨论】: