Java 中的 switch 语句详解-与if~else的区别_System

Java 中的 switch 语句是一种条件语句,它允许你基于不同的情况执行不同的代码块。switch 语句通常用于替代多个 if-else 语句,使代码更加清晰和易于维护。

基本语法

switch (expression) {
    case value1:
        // 代码块1
        break;
    case value2:
        // 代码块2
        break;
    // ...
    default:
        // 默认情况下执行的代码块
        break;
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.

用法说明

  1. expressionswitch 语句中的表达式可以是任何整型(byte, short, char, int)或者枚举类型(从Java 7开始)。
  2. case:每个 case 后面跟着一个值,这个值必须与 expression 的类型兼容。如果 expression 的值与 case 后面的值相等,就会执行该 case 下的代码块。
  3. breakbreak 语句用于终止 switch 语句,防止执行流程继续向下流入其他 case 代码块。如果没有 break,程序将执行当前 case 之后的所有 case 代码块,直到遇到 breakswitch 结束。
  4. defaultdefault 代码块是可选的,如果没有任何一个 case 匹配,就会执行 default 代码块。

示例

假设我们有一个程序,根据用户输入的月份数字,输出月份的名称。

public class MonthNameSwitch {
    public static void main(String[] args) {
        int monthNumber = 3; // 假设用户输入的是3

        switch (monthNumber) {
            case 1:
                System.out.println("January");
                break;
            case 2:
                System.out.println("February");
                break;
            case 3:
                System.out.println("March");
                break;
            case 4:
                System.out.println("April");
                break;
            // ... 其他月份
            default:
                System.out.println("Invalid month number");
                break;
        }
    }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.

在这个示例中,如果 monthNumber 的值是 3,程序将输出 "March"。

注意事项

  • 从Java 12开始,switch 表达式可以返回值,这意味着你可以使用 switch 表达式作为方法调用的返回值。
  • 每个 case 后面必须有 break 或者 return 语句,否则会导致代码逻辑错误。
  • switch 语句中的 expression 必须是整型或者枚举类型,不能是浮点型或字符串。如果需要对字符串进行 switch 判断,可以使用多个 if-else 语句。

区别之处

在 Java 中,传统的 switch 语句不支持条件语句或范围检查。每个 case 后面必须是一个常量表达式,不能是一个条件表达式或范围。这意味着你不能直接在 case 后面写 x > 10 或者类似的表达式。

然而,如果你需要根据范围来执行不同的代码块,你可以使用多个 case 来覆盖不同的范围,或者使用 if-else 语句来实现。以下是一些处理这种情况的方法:

使用多个 case 覆盖范围

如果你有一个连续的数字范围,你可以为这个范围内的每个数字都写一个 case

int number = 15;

switch (number) {
    case 10:
    case 11:
    case 12:
    case 13:
    case 14:
    case 15:
        System.out.println("Number is between 10 and 15");
        break;
    // 其他 case
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.

使用 if-else 语句

如果你的范围不是连续的,或者你想要更灵活的条件检查,使用 if-else 语句可能是更好的选择。

int number = 15;

if (number > 10) {
    System.out.println("Number is greater than 10");
} else {
    System.out.println("Number is 10 or less");
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.

Java 12 引入的 Switch 表达式

从 Java 12 开始,引入了 Switch 表达式(有时被称为 Switch 语句的升级版),它允许更复杂的模式匹配和箭头语法,但即便如此,它也不支持直接在 case 后面使用条件表达式。Switch 表达式主要用于模式匹配,例如与 instanceof 结合使用。

Object obj = "Hello";

int result = switch (obj) {
    case String s -> s.length();
    default -> -1;
};
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.

在这个例子中,switch 表达式使用了模式匹配,但仍然不支持像 case x > 10 这样的条件表达式。

总的来说,如果你需要基于条件或范围来执行不同的代码块,if-else 语句