Java switch 语句

2025年7月2日 | 阅读 9 分钟

Java switch 语句从多个条件中执行一个语句。它类似于 if-else-if 梯形语句。switch 语句适用于 byte、short、int、long、enum 类型、String 以及一些包装类型,例如 Byte、Short、Integer 和 Long。从 Java 7 开始,我们可以在 switch 语句中使用 字符串

让我们详细了解 Java 中的 switch 语句。

switch 语句可以描述为一种控制流类型的语句,用于根据表达式的值来操纵程序执行流程并调用不同的代码分支。

换句话说,switch 语句测试变量与多个值是否相等。

注意事项

  • 一个 switch 表达式可以有一个或 N 个 case 值。
  • case 值必须是 switch 表达式类型。case 值必须是字面量或常量。它不允许使用 变量
  • case 值必须是唯一的。如果出现重复值,它会产生编译时错误。
  • Java switch 表达式必须是 byte、short、int、long(及其包装类型)、枚举和字符串。
  • 每个 case 语句可以有一个 break 语句,这是可选的。当控制到达 break 语句时,它会跳到 switch 表达式之后的控制。如果没有找到 break 语句,则执行下一个 case。
  • case 值可以有一个 default 标签,这是可选的。

在 Java 中,当与单个变量关联时,switch 语句提供了一种更详细的替代方案,避免了使用嵌套或多个 if-else 语句。

Java switch 语句的语法包含 switch 关键字,后面跟着需要使用括号进行评估的表达式。所提到的表达式必须明确评估为确定性数据类型,例如 int、char 或 enum 等基本类型。

语法

Switch 语句流程图

flow of switch statement in java

在 Java 中,switch 语句还可以包含一个 default 标签。default 标签仅在没有 case 标签与表达式的值匹配的情况下执行。声明 default 标签是可选的,但在出现意外值或输入时可能很有用。

switch 语句示例

示例

编译并运行

输出

20

示例:使用 Switch Case 查找月份

示例

编译并运行

输出

7 - July

Java 程序检查元音或辅音

如果字符是 A、E、I、O 或 U,则是元音;否则是辅音。它不区分大小写。

示例

编译并运行

输出

Vowel

Java Switch 语句是穿透的

Java switch 语句是穿透的。这意味着如果没有 break 语句,它将在第一个匹配后执行所有语句。

示例

编译并运行

输出

20
30
Not in 10, 20 or 30

带有 String 的 Java Switch 语句

从 Java 7 开始,Java 允许我们在 switch 表达式中使用字符串。case 语句应该是一个字符串字面量。

示例

编译并运行

输出

Your Level is: 3

Java 嵌套 Switch 语句

我们可以在 Java 中在一个 switch 语句中使用另一个 switch 语句。这称为嵌套 switch 语句。

示例

编译并运行

输出

Data Communication and Networks, MultiMedia

在 Switch 语句中使用枚举

Java 允许我们在 switch 语句中使用枚举。Java 枚举是一个表示一组常量的类(不可变,例如 final 变量)。我们使用关键字 enum,并将常量放在大括号中,用逗号分隔。

示例

编译并运行

输出

Sunday
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday

Switch 语句中的 Java 包装器

Java 允许我们在 switch 语句中使用四种 包装类 - Byte、Short、Integer 和 Long。

示例

编译并运行

输出

You are eligible to vote.

重要提示

  • Java Switch 语句的一个主要重要特性是它的穿透行为。这意味着如果一个 case 标签不包含 break 语句,执行将直接传递到下一个 case 标签。switch 语句还可以包含一个 default 标签,如果所有 case 标签都不匹配表达式的值,则执行该标签。default 标签是可选的,但对于处理意外或未指定的值很有用。
  • Switch 语句只能匹配精确值,不能检查值范围。这意味着如果您需要检查值范围,则需要使用多个 case 标签或求助于其他控制流语句,例如 if-else。
  • Switch 语句只能用于检查表达式和 case 标签之间的相等性。它们不能执行更复杂的检查,例如检查条件或使用比较运算符。
  • switch 语句中的表达式必须评估为原始数据类型(int、char 或 enum)或 String(从 Java 7 开始)。此限制限制了可与 switch 语句一起使用的表达式类型,使其在某些情况下不如其他控制流语句灵活。
  • 值得注意的是,从 Java 12 开始,switch 语句已得到增强,支持 switch 表达式,允许 switch 语句用作返回值的表达式。此功能提供了更大的灵活性,在某些情况下可以生成更简洁、更具可读性的代码。
  • 总的来说,Java 中的 switch 语句是一个强大的工具,用于根据表达式的值控制程序流程,提供了一种清晰高效的方式来处理多种分支场景。
  • Switch 语句有时会导致代码重复,尤其是在多个 case 块执行类似操作时。这会使代码更难以维护和调试。
  • 虽然从 Java 7 开始,switch 语句可以与 String 对象一起使用,但它们不能直接与其他对象类型一起使用。此限制会使 switch 语句在需要比较和评估复杂对象的场景中不太有用。

Java Switch Case 多选题

1. 在 Java 的 switch 语句中,以下哪种数据类型可以用作控制表达式?

  1. int
  2. long
  3. String
  4. 以上全部。
 

答案:d)

解释: 在 Java 中,switch 语句可以使用 int、long 和 String 数据类型作为控制表达式。


2. 如果在 switch 语句的 case 块中省略 break 语句会发生什么?

  1. switch 语句继续执行下一个 case 块。
  2. switch 语句退出 switch 块。
  3. switch 语句生成编译错误。
  4. 行为未定义。
 

答案:a)

解释: 如果省略 break 语句,switch 语句将继续执行后续 case 块中的代码,直到遇到 break 语句或 switch 块结束。


3. 关于 switch 语句中的穿透行为,以下哪项陈述是正确的?

  1. 穿透行为是 Java switch 语句中的错误。
  2. 穿透行为允许顺序执行多个 case 块,直到遇到 break 语句。
  3. 穿透行为仅在带有 default case 的 switch 语句中允许。
  4. 穿透行为是 switch 语句的默认行为。
 

答案:b)

解释: switch 语句中的穿透行为允许顺序执行多个 case 块,直到遇到 break 语句或直到 switch 块的末尾。


4. 关于在 Java 中将 switch 语句与 String 对象一起使用,以下哪项陈述是正确的?

  1. Java 不允许将 switch 语句与 String 对象一起使用。
  2. 带有 String 对象的 switch 语句只能与常量表达式一起使用。
  3. 从 Java 7 版本开始,支持带有 String 对象的 switch 语句。
  4. 带有 String 对象的 switch 语句效率低于使用 if-else 语句。
 

答案:c)

解释: 从 Java 7 版本开始,支持带有 String 对象的 switch 语句。


5. 以下哪项不是 Java 中 switch 语句的有效用例?

  1. 命令行应用程序中的菜单选择
  2. 在 Web 服务器中处理不同的 HTTP 方法
  3. 根据用户输入评估复杂条件
  4. 实现状态机
 

答案:c)

解释: 尽管 switch 语句适用于处理多个条件,但它们不适用于根据用户输入评估复杂条件。


下一个主题Java For 循环