switch-case表达式
从Java 12开始,switch-case语句升级为更简洁的表达式语法,使用类似模式匹配的方法保证只有一种路径会被执行,并且不需要break语句。
新语法使用 ->
,如果有多条语句,需要用 {}
括起来。不要写 break
语句,因为新语法只会执行匹配到的单条语句或匹配到的 {}
块里的语句。
switch-case的使用脱离不开下面两种场景,我们用两个demo进行演示。
demo1
下面程序输出 “最喜欢的水果就是芒果,也就是mango”。
public static void main(String[] args) {
String fruit = "mango";
switch (fruit) {
case "apple" -> System.out.println("苹果");
case "pear" -> System.out.println("梨");
case "mango" -> {
fruit = "最喜欢的水果就是芒果,也就是"+fruit;
System.out.println(fruit);
}
default -> System.out.println("今天没有水果吃");
}
}
demo2
我们还可能用switch语句给某个变量赋值,如下程序输出 “price = 16”。
public static void main(String[] args) {
String fruit = "mango";
int price = switch (fruit) {
case "apple" -> 10;
case "pear", "mango" -> 16;
default -> 0;
}; // 注意赋值语句要以;结束
System.out.println("price = " + price);
}
demo3
switch与enum是黄金搭档,使用switch语句的时候更适合传入enum参数,而不是int参数或String参数。
enum Weekday {
SUN, MON, TUE, WED, THU, FRI, SAT;
}
public class Hello {
public static void main(String[] args) {
Weekday day = Weekday.SUN;
switch(day) {
case MON,TUE,WED,THU,FRI -> System.out.println("Today is " + day + ". Work at office!");
case SAT,SUN -> System.out.println("Today is " + day + ". Work at home!");
default-> throw new RuntimeException("cannot process " + day);
}
}
}
他の者にできたか?ここまでやれたか?この先できるか?いいや、仆にしかできない!