Java中的switch case语句

本文详细介绍了Java中的switch语句,包括基本格式、案例分析、嵌套switch以及与if语句的区别。通过一个买饮料的案例展示了switch在多条件判断中的应用,并指出switch在效率上的优势。同时,强调了switch的注意事项,如case值的唯一性、default的重要性以及break的作用。此外,还讨论了if语句与switch语句在适用性和效率上的差异,提示开发者应根据实际需求选择合适的条件判断结构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

switch语句格式

案例一

嵌套 switch 语句

if 语句和 switch 语句的区别


if…else 语句可以用来描述一个“二岔路口”,我们只能选择其中一条路来继续走,然而生活中经常会碰到“多岔路口”的情况。所以这里引出了switch case 语句。

switch语句格式

switch 语句是 Java 的多路分支语句。它提供了一种基于一个表达式的值来使程序执行不同部分的简单方法。因此,它提供了一个比一系列 if-else-if 语句更好的选择。

switch 语句的基本语法形式如下所示:

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

          default:
          语句体n+1:
          break;
}

其中,switch、case、default、break 都是 Java 的关键字。

名词解释:
   case: 后面跟的是要和表达式进行比较的值(常量),如果说匹配到了对应的case的值,
         那么久执行相对应的语句体,而且这个语句的部分可以是一条语句,也可以是多条语句。
   break:表示中断的意思,结束的意思,可以结束switch语句
   default:表示默认的意思,当表达式的值与所有的case的值都不匹配的时候。最后才执行
            default中的语句体。(与if-else if...-else中最后else对应着去理解)

执行流程:
   1、计算表达式的值
   2、拿着这个计算好的值与  case 相对应的值(常量)按照顺序从上往下依次进行比较,如果有相同的值,就开始执行此位置的case中的语句体内容。
   3. 当语句体的内容执行完毕后,会紧接执行break语句,执行break语句就 代表着咱们这个switch选择结构的结束(跳出switch选择)
   4、当第二步从上 往下去匹配case的值的时候,如果没有匹配相对应的 值,就会执行default中的语句体内容,最后跳出switch语句。


案例一


     买饮料案例(假设只能 买一样商品)

     可乐 3
     旺仔牛奶 5
     红牛 6
     农夫山泉 2
     脉动 4

    用switch语句实现购物,键盘录入身上带了多少钱

import java.util.Scanner;
public class SwitchDemo01 {
    public static void main(String[] args) {
        //创建键盘录入对象
        Scanner sc = new Scanner(System.in);

        // 可乐 3
        //     旺仔牛奶 5
        //     红牛 6
        //     农夫山泉 2
        //     脉动 4
        //-----雪碧 3
        //键盘录入你身上带了多少钱
        System.out.println("您身上带了多少钱:");
        int money = sc.nextInt();
//        int s = 20;

        switch (money){
//            default:
//                System.out.println("该超市没有对应价格的饮料,下次再来!");
            case 3:
                System.out.println("欢迎购买可乐,欢迎下次光临!");
                break;
//            case s:
//                System.out.println("欢迎购买可乐,欢迎下次光临!");
//                break;
//            case 3:
//                System.out.println("欢迎购买雪碧,欢迎下次光临!");
//                break;
            case 5:
                System.out.println("欢迎购买旺仔牛奶,欢迎下次光临!");
                break;
            case 6:
                System.out.println("欢迎购买红牛,欢迎下次光临!");
                break;
            case 2:
                System.out.println("欢迎购买农夫山泉,欢迎下次光临!");
                break;
            case 4:
                System.out.println("欢迎购买脉动,欢迎下次光临!");
                break;
            default:
                System.out.println("该超市没有对应价格的饮料,下次再来!");
        }

    }
}

程序运行结果如下:

您身上带了多少钱:
6
欢迎购买红牛,欢迎下次光临!

Process finished with exit code 0

注意事项:
  1、case后面的值不能有重复的
  2、default语句可以进行省略,但是一般情况下,不建议删除。
  3、case后面紧跟着的只能是常量,不能是变量(int s = 20;)
  4、break语句可以省略 ,代码也不会报错,一般情况下,不建议省略,
     如果你省略了,将会全部打印输出,结果可能不是你 想要的结果,
     当匹配 到break语句省略 的那个case的时候,首先会执行对应的语句体,
     然后从匹配到的case一直运行到有break语句为止。
  5、default语句可以放在switch任意位置吗?

     可以,因为我们的switch语句执行流程是严格按照先在所有的case中匹配,当所有case都可以,
     我们可以选择case进行执行,当case不可以,我们将执行defuault,
     这和你default语句写的顺序没有关系。


嵌套 switch 语句

可以将一个 switch 语句作为一个外部 switch 语句的语句序列的一部分,这称为嵌套 switch 语句。因为一个 switch 语句定义了自己的块,外部 switch 语句和内部 switch 语句的 case 常量不会产生冲突。例如,下面的程序段是完全正确的:

public static void main(String[] args) {
    switch (count) {
        case 1:
            switch (target) {
            case 0:
                System.out.println("target is zero");
                break;
            case 1:
                System.out.println("target is one");
                break;
            }
            break;
        case 2: // ...
    }
}

本例中,内部 switch 语句中的case 1语句与外部 switch 语句中的case 1语句不冲突。变量 count 仅与外层的 case 语句相比较。如果变量 count 为 1,则变量 target 与内层的 case 语句相比较。

学到这里我们可以发现以下几点:

  • switch 语句不同于 if 语句的是 switch 语句仅能测试相等的情况,而 if 语句可计算任何类型的布尔表达式。也就是 switch 语句只能寻找 case 常量间某个值与表达式的值相匹配。

  • 在同一个 switch 语句中没有两个相同的 case 常量。当然,外部 switch 语句中的 case 常量可以和内部 switch 语句中的 case 常量相同。

  • switch 语句通常比一系列嵌套 if 语句更有效。


最后一点尤其有趣,因为它使我们知道 Java 编译器如何工作。当编译一个 switch 语句时,Java 编译器将检查每个 case 常量并且创造一个“跳转表”,这个表将用来在表达式值的基础上选择执行路径。因此,如果你需要在一组值中做出选择,switch 语句将比与之等效的 if-else 语句快得多。

编译器可以这样做是因为它知道 case 常量都是同类型的,所要做的只是将它与 switch 表达式相比较看是否相等。对于一系列的 if 表达式,编译器就无此功能。


if 语句和 switch 语句的区别

if 和 switch 语句都表示条件语句,可以从使用效率和实用性两方面加以区分。

1. 从使用效率上区分

从使用效率上区分,在对同一个变量的不同值作条件判断时,既可以使用 switch 语句,也可以使用 if 语句。使用 switch 语句的效率更高一些,尤其是判断的分支越多,越明显。

2. 从实用性上区分

从语句的实用性角度区分,switch 语句不如 if 条件语句,if 语句是应用最广泛和最实用的语句。

3. 何时使用 if 语句和 switch 语句

在程序开发的过程中,何时使用 if 语句和 switch 语句,需要根据实际情况而定,应尽量做到物尽其用。不能因为 switch 语句的效率高就一直使用,也不能因为 if 语句常用就不用 switch 语句。需要根据实际情况,具体问题具体分析,使用最适合的条件语句。

一般情况下,对于判断条件较少的,可以使用 if 条件语句,但是在实现一些多条件的判断中,最好使用 switch 语句。


到底啦!请献上你的评论吧!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

liangzai2048

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值