Skip to content

在 Java 中,switch语句用于进行多重选择。它可以根据表达式的值来执行不同的代码块。switch语句的基本结构如下:

switch (expression) {
    case value1:
        // 当 expression 的值等于 value1 时执行的代码
        break;
    case value2:
        // 当 expression 的值等于 value2 时执行的代码
        break;
    ...
    default:
        // 当 expression 的值都不匹配上述情况时执行的代码
}

以下是一些关于switch语句的注意事项:

  • 表达式可以是整数类型(byteshortint)、字符类型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);
    }
}