【发布时间】:2021-01-15 08:17:32
【问题描述】:
我对这个例子感到困惑。如果break 被删除,那么Today is Saturday 和Today 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