else if的运作流程

本文通过一个具体的代码示例,深入探讨了elseif与switchcase在条件判断上的区别及效率对比。指出switchcase通过编译期间创建的映射表进行快速查找,而elseif则需遍历所有条件直到找到匹配项,因此switchcase在执行效率上更胜一筹。

 

今天工作中碰到了一个else if,我一直以为else if跟if一样都会判断,然而,事情并不是我想的那样。

 

/**
 * @author R.oldmee
 * @date 2019/2/19 5:59 PM
 */
public class ElseIfTest {
    @org.junit.Test
    public void test() {
        int a = 30;
        if (a > 10 && a < 30) {
            System.out.println("1"); //  一旦满足一个条件,后面的全部不执行
        } else if (a > 15 && a < 50) {
            System.out.println("2"); // 前面的不满足才会执行到这里,一旦这里满足,后面的判断全都不执行
        } else if (a > 20 && a < 35) {
            System.out.println("3");
        } else {
            System.out.println("else");
        }
    }
}

把上面例子中的不等号换成等号else if就跟switch case一样了,但是swtich case比else if效率高,else if是遍历所有的条件知道满足后才会跳出,swtich case编译期间用了一个map把case后面的情况都存在一张表里了,直接查表,然后跳转到那个条件下去执行,所以比else if要快。

在不同的编程语言中,`if else if else` 语句有着不同的使用方法和语法规则: ### C 语言 C 语言中 `if else if else` 语句标准格式如下: ```c if(条件) { 内容 } else if (条件) { 内容 } else if(条件) { 内容 } // ... else { 内容 } ``` 其中,`else if` 可以没有,也就是可以没有其他分支,最后这个 `else` 也可以没有,不用加 `end if`。例如: ```c #include <stdio.h> int main() { int a = 3; int b = 2; if (a > b) { printf("a>b"); } else { printf("a<b"); } return 0; } ``` 上述代码根据 `a` 和 `b` 的大小关系输出相应结果 [^1][^4]。 ### Shell 脚本 在 Shell 脚本里,如果有多个分支,可以使用 `if elif else` 语句,格式为: ```bash if command then 符合该条件执行的语句 elif command then 符合该条件执行的语句 # ... else 不符合上述条件执行的语句 fi ``` 示例如下: ```bash #!/bin/bash read -p "enter name: " name read -p "enter id: " id if [ $name == "shuge" ] && [[ $id > "18" ]] then echo "name is shuge" elif [ $name == "other" ] then echo "name is other" else echo "输入条件不匹配" fi ``` 该脚本根据用户输入的姓名和 ID 进行条件判断并输出相应结果 [^2]。 ### Java Java 中 `if else if else` 语句的执行流程为:当条件 1 成立时,则执行功能代码 1;当条件 1 不成立且条件 2 成立时,则执行功能代码 2;如果条件 1、条件 2 都不成立且条件 3 成立,则执行功能代码 3,依次类推,如果所有条件都不成立,则执行 `else` 语句的功能代码。语法格式如下: ```java if (条件 1) { 功能代码 1; } else if (条件 2) { 功能代码 2; } else if (条件 3) { 功能代码 3; } // ... else { 功能代码; } ``` ### Verilog Verilog 中 `if-else` 语句会根据条件表达式的逻辑值决定是否执行相应语句。例如: ```verilog if (sel_en == 1) begin data_out = data_in; end else if (sel_en == 0) begin // 可以添加其他操作 end else begin // 其他情况操作 end ``` 当 `sel_en` 为 1 时,执行赋值语句 `data_out = data_in`;当 `sel_en` 为 0 时,可以执行其他操作;对于其他情况,在 `else` 分支处理 [^5]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值