在 Java 中,switch 语句是用于基于不同条件执行不同代码块的一种控制流语句。与 if-else 语句相比,switch 更适合用于多个值的条件判断。它的语法简单、执行效率较高,尤其在处理多个可能值时,switch 提供了更清晰和结构化的代码。
1. Java 中的 switch 语句的基本用法
基本语法结构如下:
switch (表达式) {
case 值1:
// 如果表达式的结果等于值1,执行此代码块
break; // 退出 switch 语句
case 值2:
// 如果表达式的结果等于值2,执行此代码块
break;
default:
// 如果表达式的结果没有匹配的值,执行此代码块
break;
}
switch:用于判断的条件,通常是一个表达式。case:每个case代表一个可能的值,switch语句会根据该值来执行相应的代码块。break:结束当前的switch语句。如果没有break,则会继续执行下一个case中的代码,这被称为“穿透”行为(fall-through)。default:是一个可选项。如果所有的case都不匹配,default语句中的代码会执行。
2. 三种 switch 语句的语法
(1)传统的 switch 语句(用于 int、char、String 等类型)
这是一种常见的 switch 使用方式。你可以根据整数值、字符或者字符串值来判断。
int day = 3;
switch (day) {
case 1:
System.out.println("Monday");
break;
case 2:
System.out.println("Tuesday");
break;
case 3:
System.out.println("Wednesday");
break;
default:
System.out.println("Invalid day");
}
解释:根据变量 day 的值来选择合适的输出,day == 3 会输出 "Wednesday"。
(2)switch 语句与字符(char)
switch 也可以使用字符类型来进行判断:
char grade = 'A';
switch (grade) {
case 'A':
System.out.println("Excellent");
break;
case 'B':
System.out.println("Good");
break;
case 'C':
System.out.println("Fair");
break;
default:
System.out.println("Invalid grade");
}
解释:根据字符 grade 的值输出相应的评价。
(3)switch 语句与字符串(String)
Java 7 及其以上版本支持 switch 使用 String 类型进行条件判断。这是一个非常常见的应用场景:
String color = "Red";
switch (color) {
case "Red":
System.out.println("The color is Red");
break;
case "Green":
System.out.println("The color is Green");
break;
case "Blue":
System.out.println("The color is Blue");
break;
default:
System.out.println("Unknown color");
}
解释:根据字符串 color 的值选择输出内容。
3. switch 支持的参数类型
在 Java 中,switch 语句支持以下几种数据类型:
byte(8 位带符号整数)short(16 位带符号整数)char(16 位字符类型)int(32 位带符号整数)String(Java 7 及以上支持)enum(Java 5 及以上支持)
switch 语句不支持以下数据类型:
long:switch不支持long类型。即使是long的包装类Long也不行。float和double:switch不能使用浮点数类型进行判断。boolean:switch不能使用布尔值进行判断。
4. 示例:switch 与 enum 类型
enum 类型是 Java 中的一个重要数据类型,switch 可以用来判断 enum 类型的常量值:
enum Day { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY }
Day today = Day.WEDNESDAY;
switch (today) {
case MONDAY:
System.out.println("Start of the work week");
break;
case WEDNESDAY:
System.out.println("Midweek day");
break;
case FRIDAY:
System.out.println("End of the work week");
break;
default:
System.out.println("Weekend");
}
解释:使用 enum 类型的值来判断输出。在这里,如果 today 是 WEDNESDAY,输出将是 "Midweek day"。
5. switch 语句的改进:Java 12 引入的 “switch expressions”
从 Java 12 开始,switch 被增强为一个表达式,不仅可以执行动作,还可以返回值。
int dayOfWeek = 3;
String result = switch (dayOfWeek) {
case 1 -> "Monday";
case 2 -> "Tuesday";
case 3 -> "Wednesday";
case 4 -> "Thursday";
case 5 -> "Friday";
case 6 -> "Saturday";
case 7 -> "Sunday";
default -> throw new IllegalArgumentException("Invalid day of the week: " + dayOfWeek);
};
System.out.println(result);
解释:在这种改进的 switch 中,-> 代表表达式的结果。这个语法简洁并且能够返回一个值。与传统的 switch 相比,新的 switch 语句可以直接返回一个值,并且每个 case 分支后不再需要 break 语句。
总结
switch语句是一种便捷的多条件选择结构,适用于数值、字符、字符串等类型的判断。switch支持int、char、String和enum等类型,并且从 Java 7 开始支持String类型。- Java 12 引入了
switch expressions,使得switch不仅可以执行动作,还可以返回值。
发表回复