这是一个基本的疑问,我没有从我的搜索得到任何正确的答案。 在android中哪个条件语句更快?如果还是Switch和是什么原因? Android编码指南本身建议使用Switch而不是If。请澄清我的疑问。
答案 0 :(得分:5)
有几个原因可以解释为什么我会考虑使用开关而不是if.Actually它取决于。
<强> 1。速度强>
switch语句可能比if更快。我写的可能是因为它取决于你的用例。它能够产生类似价值的东西 - &gt;函数调用范围中的每个值,并使用一次查找找出代码路径。这通常比为if链生成的指令更快,因为if中的每个表达式都是单独计算的。
<强> 2。易于维护
当您需要组合案例时,开关看起来更干净。如果会很快失控。 与if相比,在switch中轻松添加新案例。
另一个重点是 if-else或switch都不是直接汇编语句。所以它取决于编译器将代码转换为汇编的方式。
以最易读的方式编写代码,让编译器负责其余部分。编译器通常将swith语句转换为查找表,从而获得一些优势。如果你有一些&#34;可能&#34;并且&#34;不太可能&#34;条件
答案 1 :(得分:3)
从技术上讲,这个问题实际上与建议的问题重复,但建议的问题中的答案有点不好,所以我会重新回答。
switch
快于if
的原因是:
switch
保证要检查的表达式只会被评估一次,而级联的if
序列可以为每个if
重新计算一次表达式,如果表达式涉及一个术语,编译器无法安全地假设它在重复评估期间保持不变,例如,表达式涉及虚拟方法调用时。
switch
使用特殊字节码实现,该字节码由VM以非常有效的方式实现。我无法确切知道任何VM如何实现这个字节码,但我几十年前看到C ++编译器做的事情就像在交换机标签值表上执行二进制搜索一样聪明,我没有理由相信现代虚拟机至少不是那么聪明。