Java分支语句if else和switch的使用

文章详细介绍了Java中的分支语句,包括单分支if,双分支if...else,多分支if...elseif...else以及switch。对比了if和if...else在处理两个分支时的不同,强调了switch在多分支情况下的效率优势,因为其使用跳转表进行快速定位。同时,提到了switch的适用类型及case穿透现象,并指出在适当的情况下,switch比if...else可能更高效。
摘要由CSDN通过智能技术生成

Java的流程控制语句中的分支语句有单分支 if ,双分支 if ... else ,多分支 if ... else if .. else,除此之外还有switch语句,其中多分支的情况既可以用if ... else if ...else 还可以用switch来写,基本都能得到想要的结果。

if 与 if else

在有两个分支的情况下时,常常可以用if和if else(多分支时也可以用单if),但if和if else在两分支情况下是有区别的:单if写两次意味着两次都会进入if的条件判断语句去进行判断 ,而if else若进入if条件判断时满足执行,那么不会再进入else条件判断中。单if代码举例:

int num = 50;

if(num > 40) {
    System.out.println("num大于40");
}
if(num < 60) {
    System.out.println("num小于60");
}

该代码的运行结果如下:

if else if else代码举例:

int num = 50;

if(num > 40) {
    System.out.println("num大于40"); //执行完这句就结束,不会进入else
} else if(num < 60) {
    System.out.println("测试代码1");
} else {
    System.out.println("测试代码2");
}

运行结果如下,在判断满足任何一个条件以后就会终止接下来的判断,所以只会输出一句:

多分支情况下的if... else if... else同理,都是只会进入其中一条语句执行且终止后续判断,相比只用单if语句来得效率更高,单if语句更常用于拦截或者穷举情况。

switch语句

switch语句也可以用来实现类似的条件分支效果,switch的语法格式如下:

    switch (表达式) {
    case 常量1:
        语句;
        break;
    case 常量2:
        语句;
        break;
    ......
    default:
        break;
    }

switch语句中可以匹配的表达式的类型有

  • byte、short、char、int这四种类型;

  • 枚举类型;

  • String 类型;(1.7以后开始支持)

switch语句的规则很简单,即拿switch后的表达式的值和case后的值做判断,满足哪个就进入哪个case去执行语句。不过需要注意的是,case之后的值必须和switch变量的类型一致。

此外,switch语句一般都会在最后加上default进行结束,表示如果没有case的值可以匹配上那么最后会执行这条语句。

switch语句只有在匹配上相应的case的值才会进入该case执行语句,若该case在语句最后有break;那么执行完该语句会退出switch,如果该case没有break;那么会直接匹配接下来的case并执行语句(无论是否匹配),直到遇到break;或者default。(case穿透现象)

有break的代码和运行结果举例:

        Scanner sc = new Scanner(System.in);
        System.out.println("请输入天:");
        int day = sc.nextInt();
        
        switch(day) {
        case 1:
            System.out.println("星期一");//有break的情况下
            break;
        case 2:
            System.out.println("星期二");
            break;
        case 3:
            System.out.println("星期三");
            break;
        }

而在没有break的情况下,会出现case穿透现象,代码和运行结果如下:

        Scanner sc = new Scanner(System.in);
        System.out.println("请输入天:");
        int day = sc.nextInt();
        
        
        switch(day) {
        case 1:
            System.out.println("星期一");
                                            //没有break
        case 2:
            System.out.println("星期二");
                                            //没有break
        case 3:
            System.out.println("星期三");
            break;
        }

使用差异和运行效率

对于多分支情况来说,使用if else if 和 switch通常都可以,但是由于switch的变量类型限制,使用场景相对于if else if来说肯定局限很多,比如switch就无法匹配逻辑判断表达式如 if(a > b && a > c),只能匹配常量。

如果条件分支比较多的情况下,使用switch语句效率会更高,因为switch case语句会生成一个跳转表来指向case分支的地址,而这个表的索引号与switch变量的值是相等的。因此不需要像if else一样一个个遍历去判断,而是直接访问对应索引号,所以效率自然会更高。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值