Java12之switch升级语法在Eclipse中的穿透问题

在Java12之前,switch的语法如下:

switch(表达式) {
case 值1:
语句体1;
break;
case 值2:
语句体2;
break;

default:
语句体n+1;
break;
}
从Java12开始,switch语句升级为更简洁的表达式语法,使用类似模式匹配的方法,保证只有一条路径被执行,并且不需要break语句。看我下边这段代码:
switch (choise) {
case 1->{
switch(random) {
case 1->System.out.println(“剪刀”+“PK”+“剪刀”+“平局”);
case 2->System.out.println(“剪刀”+“PK”+“石头”+“你输啦”);
default->System.out.println(“剪刀”+“PK”+“布”+“你赢啦”);
}这里
}
case 2->{
switch(random) {
case 1->System.out.println(“石头”+“PK”+“剪刀”+“你赢啦”);
case 2->System.out.println(“石头”+“PK”+“石头”+“平局”);
default->System.out.println(“石头”+“PK”+“布”+“你输啦”);
}这里
}
default->{
switch(random) {
case 1->System.out.println(“布”+“PK”+“剪刀”+“你输啦”);
case 2->System.out.println(“布”+“PK”+“石头”+“你赢啦”);
default->System.out.println(“布”+“PK”+“布”+“平局”);
}这里
}
}
我安装的eclipse版本是Version: 2020-03 (4.15.0),以上代码在其执行结果如下(此时choise=1,random=3)
剪刀PK布你赢啦
石头PK布你输啦
布PK布平局

很明显出现了穿透。当然,这样的穿透问题在控制台编译运行代码时是不会出现的。显然,这是Eclipse本身的bug。
目前解决方法是将每个嵌套的switch的default后边的语句体用花括号括起来或者在上边代码标注“这里”的地方加上“break;"或者“;”,即可解决。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值