【Java基础篇】你真的懂switch语句吗?

switch语句语法

		switch (expression) {
		case value:
			//语句
			break;//可选
            //可以有任意个case语句
		default://可选
			//语句
		}

注意点

switch的语句中表达式expression返回类型只能是byte、char、short、int以及他们的包装类型和枚举类型,java1.7开始支持String类型;

case语句值的类型必须与表达式expression的类型相同,并且是字面量或者是常量。

执行过程

从上到下进行匹配,一旦匹配到了,后面的语句块都执行,直到执行完或者遇到break;

案例分析

今天在牛客网上刷到一个题目,下面代码的输出结果是什么:

		int v1 = 0, v2 = 0, v3 = 0, v4 = 0;
		String str = "1314520";
		char[] s = str.toCharArray();
		for (int i = 0; i < s.length; i++) {
			switch (s[i]) {
			default:
				v4++;
			case '1':
				v1++;
			case '2':
				v2++;
			case '3':
				v3++;

			}
		}
		System.out.printf("%d,%d,%d,%d", v4, v1, v2, v3);

结果是3,5,6,7,是不是跟你的结果完全不一样?

下面我们来分析程序的执行过程:

第一轮:s[i]=s[0]='1',会执行v1++;v2++;v3++;这时候v1=1,v2=1,v3=1,v4=0

第二轮:s[i]=s[1]='3',会执行v3++;这时候v1=1,v2=1,v3=2,v4=0

第三轮:s[i]=s[2]='1',会执行v1++;v2++;v3++;这时候v1=2,v2=2,v3=3,v4=0

第四轮:s[i]=s[3]='4',会执行v4++;v1++;v2++;v3++;这时候v1=3,v2=3,v3=4,v4=1

第五轮:s[i]=s[4]='5',会执行v4++;v1++;v2++;v3++;这时候v1=4,v2=4,v3=5,v4=2

第六轮:s[i]=s[5]='2',会执行v2++;v3++;这时候v1=4,v2=5,v3=6,v4=2

第七轮:s[i]=s[6]='0',会执行v4++;v1++;v2++;v3++;这时候v1=5,v2=6,v3=7,v4=3

所以最后System.out.printf("%d,%d,%d,%d", v4, v1, v2, v3);输出结果为3,5,6,7

jdk12预览版

在之前的版本中如果没有写break会有case穿透问题,jdk12中会默认break,并且可以case多个值

int month = 3;
    switch (month) {
        case 3,4,5 -> System.out.println("spring");
        case 6,7,8 -> System.out.println("summer");
        case 9,10,11 -> System.out.println("autumn");
        case 12, 1,2 -> System.out.println("winter");
        default -> System.out.println("wrong");
    }

jdk13预览版

switch语句有返回值

int month = 3;
   String result = switch (month) {
        case 3,4,5 -> "spring";
        case 6,7,8 -> "summer";
        case 9,10,11 -> "autumn";
        case 12, 1,2 -> "winter";
        default -> "wrong";
    };

    System.out.println(result);

注意预览版的特性不能直接使用,要加上特殊的参数,两个版本后会成为正式特性 

java9到18版本中的新特性 - 知乎 (zhihu.com)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值