switch详解

本文深入讲解了Java中的switch语句,包括其语法结构、执行流程、与if/else语句的对比,以及支持的不同数据类型,如整型、枚举和String类型。

今天来讲讲我所了解的多重选择语句:switch。

switch语法结构

首先,来简单介绍一下switch的语法结构。
switch语句的语法格式如下,其中switch、case、default是关键字。

switch (表达式) {
case 常量表达式1:语句序列1;[break;]
case 常量表达式2:语句序列2;[break;]
……
[default: 语句序列;]
}

switch语句的执行过程是,将<表达式>的值按照从上到下的顺序依次与<常量表达式>的结果进行比较,当<表达式>的值与某个常量相等时,执行后面的<语句序列>,知道遇到break或switch语句执行完;若没有与表达式值相等的常量值,则执行default字句;此时若没有default字句,则不执行。(需要注意的是表达式的值应该是唯一的)

switch与if/else比较

我们写程序是经常会碰到要处理多种可能的情况,在这种情况下可以使用if/else进行多重判断,但是多重if/else结构会使代码看起来有些繁琐。Java中的switch很好的解决了这一问题。

例如,当我们程序中需要一个选项菜单时,如1、2、3、4,这时就需要判断用户输入的是哪一个数字。

使用if/else代码

Scanner sc = new Scanner(System.in);
System.out.println("请输入选项1、2、3、4");
int choice = in.nextInt();
if (choice == 1) {
    //TODO:选择1时,要干啥……
} else if (choice == 2) {
    //TODO:选择2时,要干啥……
} else if (choice == 3) {
    //TODO:选择3时,要干啥……
}  else if (choice == 4) {
    //TODO:选择4时,要干啥……
}

使用switch代码

Scanner sc = new Scanner(System.in);
System.out.println("请输入选项1、2、3、4");
int choice = in.nextInt();
switch (choice) {
    case 1:
        //TODO:选择1时,要干啥……
        break;
    case 2:
        //TODO:选择2时,要干啥……
        break;
    case 3:
        //TODO:选择3时,要干啥……
        break;
    case 4:
        //TODO:选择4时,要干啥……
        break;
    default//default代表没有与之相匹配的case,就执行default。相当于else
        //TODO:瞎输入的时候……
        break;
}

流程图如下

这里写图片描述

通过两个简单代码比较,就可以看出使用switch语句可以是代码变得更简洁。

case表达式类型(重点)

本文的重点(重点都是在后面的),在这里说一说switch表达式中值得类型(也就是关键字 switch 后面括号里可以放什么类型的值),也就是 case 后面的值的类型。(下面都称为 case 标签)

  1. case 标签中的值为整型类型 int 及可以转换成整形的类型,比如char、byte、shot。当然还包括它们的包装类。(如果你想在里面放其他的类型,比如 long 类型,此时需要强制转换。但是强制转换可能出现错误)。
  2. 从 JDK 1.5 开始 case 标签开始支持枚举类型。
  3. 从 JDK 1.7 开始 case 标签开始支持 String 类型。

    在这里详细解释一下,case 标签是怎么支持 String 类型的。

这个新特性实际上实在 Java 虚拟机上实现的,即在编写代码是试用 String类型,但是在编译程序是 Java 虚拟机会将其进行转换,将字符串类型转换成整型或可以转换成整型的类型。这就意味着在 Java 虚拟机和字节码这个层次上还是只支持整型或可以转换成整型的类型。
转换原理为,将字符串通过哈希算法进行转换,使其变成 Java 虚拟机支持类型。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值