【问题标题】:Java switch runs all cases if no break如果没有中断,Java 开关会运行所有情况
【发布时间】:2021-01-15 08:17:32
【问题描述】:

我对这个例子感到困惑。如果break 被删除,那么Today is SaturdayToday is Sunday 都将被打印。我需要知道为什么会这样?

int day = 4;
switch (day) {
  case 4:
    System.out.println("Today is Saturday");
   // break;
  case 7:
    System.out.println("Today is Sunday");
   // break;
 
}

P.S:对于那些对我问这么简单的问题感到惊讶的人:
我学习Kotlin已经有一段时间了,它不需要在when表达式中添加break,所以当我在一个需要switch语句的java项目上工作时让我感到困惑

【问题讨论】:

  • 不要太刻薄,了解一下语言的工作原理?
  • docs.oracle.com/javase/tutorial/java/nutsandbolts/switch.html -> "break 语句是必要的,因为没有它们,switch 块中的语句就会失败:匹配 case 标签之后的所有语句都按顺序执行,而不管后续 case 标签,直到遇到 break 语句。"
  • 如果你不跳出 switch,第一个匹配的 case 和所有下面的 case 都会被执行(直到第一个 break)。您可以在较新的 java 版本中使用 -> 代替 :,这样可以确保只执行一种情况。
  • 许多(大多数?)其他语言也是如此。根据你的资料,我猜你最熟悉php:“如果你不在一个case语句列表的末尾写一个break语句,PHP会继续执行下一个case的语句。”。所以我有点惊讶这让你感到惊讶。
  • TLDR;这就是 Java 中 switch 语句的工作方式。像大多数与 C 共享遗产的语言一样,如果 case 语句 isint 以 break 语句结束,Java 允许 Switch 语句中的 case “落入”下一个 case。这可能很有用,但也可能导致错误。 Java 12 引入了一个 Switch 表达式,其语法和语义略有不同。

标签: java switch-statement


【解决方案1】:

您的问题可能与其他问题重复,但原因是Java switch 中的case 语句默认情况下将流向下一个case 语句,除非明确提及break。为了更好地理解 为什么 case 语句会有这种行为,一个例子可以说明这一点。假设您希望在星期一、星期二和星期三发生相同的逻辑。然后,您可以使用以下内容:

switch (day) {
    case 1:
    case 2:
    case 3:
        System.out.println("Today is Monday, Tuesday, or Wednesday");
        break;

    case 4:
        System.out.println("Today is Thursday");
        break;

    case 7:
        System.out.println("Today is Sunday");
        break;
}

【讨论】:

    【解决方案2】:

    Break 语句: Break 语句用于终止循环。当在循环中遇到 break 语句时,循环是 立即终止。

    因此,当我们在 switch 语句中使用 break 语句时,它会在这种情况下终止循环,并且程序控制会在循环之后的下一条语句处恢复.

    回答您的问题:当不使用 break 语句时,程序的控制会流经每个案例,直到它到达 switch 块或break 语句。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-15
      • 2016-11-29
      • 2015-06-20
      • 2012-11-13
      • 1970-01-01
      • 1970-01-01
      • 2014-10-26
      • 2014-04-05
      相关资源
      最近更新 更多