Java的switch语句是一个变化较大的语法(可能是因为Java的switch语句一直不够强大、熟悉swift的可与swift的switch语句对比一下,就会发现Java的switch弱爆了),因为Java的很多版本都在不断地改进switch语句:
- 从Java 5 开始,Java的switch语句可使用枚举了。
- 从Java 7 开始,Java的switch语句支持使用String类型的变量和表达式了。
- 从Java 11 开始,Java的switch语句会自动对省略break导致的贯穿提示警告(以前需要使用-X:fallthrough选项才能显示出来)
但从Java 12开始,Java的switch语句可能要开挂了。
Java 12以前
先看Java 12以前的switch程序,代码如下。
代码语言:javascript复制public class SwitchTest1
{
public static void main(String[] args)
{
// 声明变量score,并为其赋值为'C'
var score = 'C';
// 执行switch分支语句
switch (score)
{
case 'A':
System.out.println("优秀");
break;
case 'B':
System.out.println("良好");
break;
case 'C':
System.out.println("中");
break;
case 'D':
System.out.println("及格");
break;
case 'E':
System.out.println("不及格");
break;
default:
System.out.println("成绩输入错误");
}
}
}
这是典型的Java 11以前的switch写法,程序较为臃肿,而且你不能忘记写break,否则switch就会贯穿、导致程序出现错误(当然,Java 11会提示警告)。
Java 12不需要break了
如果你对switch忘记写break导致贯穿实在烦腻了,可以试试Java 12对switch的改进。
你只要将case后面的冒号(:)改成箭头,那么你即使不写break也不会贯穿了,因此上面程序可改写如下形式。
代码语言:javascript复制public class SwitchTest2
{
public static void main(String[] args)
{
// 声明变量score,并为其赋值为'C'
var score = 'C';
// 执行switch分支语句
switch (score)
{
case 'A' -> System.out.println("优秀");
case 'B' -> System.out.println("良好");
case 'C' -> System.out.println("中");
case 'D' -> System.out.println("及格");
case 'E' -> System.out.println("不及格");
default -> System.out.println("成绩输入错误");
}
}
}
上面代码是不是简洁多了?
Java 12的switch表达式
Java 12的switch甚至可作为表达式了——不再是单独的语句(这是要追赶Swift的节奏呀)。例如如下程序。
代码语言:javascript复制public class SwitchTest3
{
public static void main(String[] args)
{
// 声明变量score,并为其赋值为'C'
var score = 'C';
// 执行switch分支语句
String s = switch (score)
{
case 'A' -> "优秀";
case 'B' -> "良好";
case 'C' -> "中";
case 'D' -> "及格";
case 'F' -> "不及格";
default -> "成绩输入错误";
};
System.out.println(s);
}
}
上面程序直接将switch表达式的值赋值给s变量,这样switch不再是一个语句,而是一个表达式,这种写法为Java的switch增加了无限想像空间。
Java 12中switch的多值匹配
当你把switch中的case后的冒号改为箭头之后,此时switch就不会贯穿了,但在某些情况下,程序本来就希望贯穿——比如我就希望两个case共用一个执行体!那Java 12的switch怎么办?
当然有办法,Java 12的switch中的case支持多值匹配,这样程序就变得更加简洁了。例如如下程序。
代码语言:javascript复制public class SwitchTest4
{
public static void main(String[] args)
{
// 声明变量score,并为其赋值为'C'
var score = 'B';
// 执行switch分支语句
String s = switch (score)
{
case 'A', 'B' -> "上等";
case 'C' -> "中等";
case 'D', 'E' -> "下等";
default -> "成绩输入错误";
};
System.out.println(s);
}
}
看到上面的代码,是不是感觉很爽,是不是感觉Java正在不断焕发新机?即使老如Java,依然可以魅力如初!
接下来的Java的switch是不是还可以支持区间匹配呢?让我们拭目以待。
本文结束