在为Android开发时,switch语句比if-else链更有效吗? switch语句需要更多的代码行,但是查看轶事证据似乎是Android应用程序中更常用的。

以下示例使用case语句和if-else链说明了相同的编程结构。 switch语句需要10行,而if-else链需要7行。

案例说明

public void onClickWithSwitch(View v) {
   switch(v.getId()) {
       case R.id.buttonA:
           buttonA();
           break;
       case R.id.buttonB:
           buttonB();
           break;
       case R.id.buttonC:
           buttonC();
   }
}

If-else链
public void onClickWithIf(View v) {
   int id = v.getId();
   if(id == R.id.buttonA)
       buttonA();
   else if (id == R.id.buttonB)
       buttonB();
   else if (id == R.id.buttonC)
       buttonC();
}

为什么切换比if-else链更普遍?与if-else链相比,switch语句是否提供更好的性能?

最佳答案

语言具有switch语句的原因是允许编译器生成跳转表(如果跳转表很大),这会很快,因为在运行时它可以在O(1)而非O(N)的时间内到达所需的代码。

只有在有很多情况下,并且在每种情况下要执行的代码都不需要花费很多时间,并且程序在此代码中花费的时间百分比很大,这才对速度有所帮助。

除此之外,这纯粹是一个品味问题。

代码行数与速度之间没有关系。重要的是生成的汇编语言代码的种类,我鼓励您熟悉它们。

07-24 15:36