在 Java 中,switch
语句用于进行多重选择。它可以根据表达式的值来执行不同的代码块。switch语句的基本结构如下:
switch (expression) {
case value1:
// 当 expression 的值等于 value1 时执行的代码
break;
case value2:
// 当 expression 的值等于 value2 时执行的代码
break;
...
default:
// 当 expression 的值都不匹配上述情况时执行的代码
}
以下是一些关于switch
语句的注意事项:
- 表达式可以是整数类型(
byte
、short
、int
)、字符类型char
或枚举类型。 case
后面跟着一个常量值,表示与表达式进行比较的值。- 每个
case
块结束后需要使用break
语句来终止该分支的执行,否则会继续执行下一个case
块,直到遇到break
或者switch
语句结束。 - 如果没有任何一个
case
匹配到表达式的值,那么将执行default
块中的代码。default
块是可选的。
switch语句可以嵌套在其他控制流语句中,例如if-else语句。以下是一个简单的示例,演示了switch语句的使用:
int day = 3;
switch (day) {
case 1:
System.out.println("星期一");
break;
case 2:
System.out.println("星期二");
break;
case 3:
System.out.println("星期三");
break;
default:
System.out.println("其他");
}
输出结果为:"星期三"。
在这个示例中,根据day
的值,switch 语句选择了与之匹配的代码块进行执行。由于day
的值是3
,所以执行了第三个case
块中的代码,并且没有继续执行后面的代码。
switch 表达式
switch 表达式是 Java 14 及更高版本中引入的新特性。它允许我们在 switch 语句中使用表达式作为条件,而不仅限于传统的整数或枚举类型。switch 表达式的基本结构如下:
int result = switch (expression) {
case value1 -> expression1;
case value2 -> expression2;
// ...
default -> expressionN;
};
其中,expression 是要进行匹配的值,value1, value2, ...
是可能的值列表,->
后面是与每个值相关联的表达式。
注意事项:
case
标签必须是常量表达式(即不能是变量),并且在switch
块内必须唯一。- 每个
case
标签后面可以有一个或多个表达式,并用分号;
隔开。 default
关键字表示当没有任何case
标签匹配时执行的默认情况。break
语句不再需要用于终止每个case
块,因为switch
表达式会自动结束。
以下是一个示例,演示了如何使用 switch 表达式:
public class SwitchExpressionExample {
public static void main(String[] args) {
int dayOfWeek = 3;
String dayType = switch (dayOfWeek) {
case 1, 2, 3, 4, 5 -> "Weekday";
case 6, 7 -> "Weekend";
default -> "Invalid day";
};
System.out.println("Day type: " + dayType);
}
}
在这个示例中,根据dayOfWeek
的值,我们使用switch
表达式判断是工作日还是周末,并将结果存储在dayType
变量中。最后,我们打印出dayType
的值。
yield
大多数时候,在 switch 表达式内部,我们会返回简单的值。 但是,如果需要复杂的语句,我们也可以写很多语句,放到{...}
里,然后,用yield
返回一个值作为switch
语句的返回值:
public class Main {
public static void main(String[] args) {
String fruit = "orange";
int opt = switch (fruit) {
case "apple" -> 1;
case "pear", "mango" -> 2;
default -> {
int code = fruit.hashCode();
yield code; // switch语句返回值
}
};
System.out.println("opt = " + opt);
}
}