Java中switch的四种用法
总共有四种不同形式的switch。两种是switch语句,两种是switch表达式,表达式会生成一个值。switch表达式没有“直通式”行为。
表达式,无直通行为
int numLetters numLetters = switch(seasonName){ case "Spring" ->{ System.out.println("spring time"); yield 6; } case "Summer","Winter" -> 6; case "Fall" -> 4; default -> -1; }
语句,无直通行为
switch(seasonName){ case "Spring" -> { System.out.println("spring time"); numLetters = 6; } case "Summer","Winter" -> numLetters = 6; case "Fall" -> numLetters = 4; default -> numLetters = -1; }
表达式,有直通行为(Java 14引入)
int numLetters numLetters = switch(seasonName){ case "Spring": System.out.println("spring time"); case "Summer","Winter": yield 6; case "Fall": yield 4; default: yield -1; }
语句,有直通行为(“经典”形式)
switch(seasonName){ case "Spring": System.out.println("spring time"); case "Summer","Winter": numLetters = 6; break; case "Fall": numLetters = 4; break; default: numLetters = -1; }
注意
1.switch()括号内seasonName,应与case后常量类型保持一致,或者是可以自动转换成可以互相比较的类型。
2.case标签可以是:类型为char、byte、short或int的常量表达式;枚举常量enum;字符串字面量String;多个字符串用逗号分隔。
3.case子句中的值必须是常量,不能是变量。
4.在语句中,default是可选的。
5.break和yield语句用来在执行完一个case分支后使程序跳出switch语句,如果没有break或yield,程序会顺序执行到switch结尾,产生直通行为。
6.不能在一个switch语句中混合使用冒号和箭头。
7.与break语句类似,yield会终止执行。但与break不同的是,yield还会生成一个值,这就是表达式的值。