为什么使用switch语句而不是if else语句?

def*_*alt 9 language-agnostic switch-statement

开关似乎没那么无用,因为它们可以用if-else语句替换,它可以做的不仅仅是匹配一个char/int/enum等.我只能想到一个很好用于一个开关,那将是解释命令线args.

switch语句有哪些实际用途?

Yad*_*ada 27

在某些情况下,交换机更易读并且派上用场.通常在您有选项分组时.

这是其中之一:

    int numDays = 0;
    int month = 2;
    int year = 2010;

    // find the number of days in the month
    switch (month) {
        case 1:
        case 3:
        case 5:
        case 7:
        case 8:
        case 10:
        case 12:
            numDays = 31;
            break;
        case 4:
        case 6:
        case 9:
        case 11:
            numDays = 30;
            break;
        case 2:
            if ( ((year % 4 == 0) && !(year % 100 == 0))
                 || (year % 400 == 0) )
                numDays = 29;
            else
                numDays = 28;
            break;
        default:
            System.out.println("Invalid month.");
            break;
    }
Run Code Online (Sandbox Code Playgroud)


RHS*_*ger 25

在我看来,使用switch vs if/else有两个原因:

  • 编译器可能能够更好地优化交换机.
  • switch语句更清楚地表达了代码的逻辑.具体来说,你要根据某些东西的价值采取不同的分支,而不是依赖于更复杂的逻辑.到目前为止,这对我来说是更重要的原因.


Jos*_*ury 18

你需要记住,开关更容易维护 - 一大堆嵌套的ifs和elses很快就会变得很难维护.

开关可以更容易地插入新的外壳.


Dan*_*ain 9

当我使用枚举来指示我的方法应该采取什么操作时,我使用开关.当行动互相排斥时,它会有所帮助.


Dan*_*Tao 7

对于某些环境,开关针对许多语言进行了优化.通常在可能的情况下,他们会创建跳转表甚至哈希表.实际上,当可以使用开关时,使用if/else很可能比(逻辑上)相同的代码表现更好.