为什么只是type 是p4,case p5也会执行?
case "p4":
xxx
没加break;
case "p5":
break;
在 Java 的 switch 语句中,如果某个 case 分支没有以 break; 结束,程序会 继续执行下一个 case(即所谓的 fall-through 行为)。这是你看到 case “p4” 执行后还会继续执行 case “p5” 的原因。
当 type 是 “p4” 时,程序进入 case “p4”。
执行完 case “p4” 中的逻辑之后,没有 break; 语句,所以它会继续执行后面的 case “p5”。
case “p5” 后面有 break;,所以它执行完就会跳出 switch。
如何修复?
如果你希望每个 case 只执行自己对应的逻辑,就必须在每个 case 的最后加上 break;
总结:
Java 的 switch-case 默认允许 fall-through,也就是说不加 break 就会继续往下执行。
在 Java 中,switch-case 是基于“位置”的流程控制结构。一旦进入某个匹配的 case 分支(比如 “p4”),就会从那个位置开始顺序执行代码,不再判断后续的 case 条件是否匹配,除非遇到 break;。
那意思只要匹配第一次没有Break 那就会默认fall through?
是的
只要进入了某一个 case,就一直往下执行代码;
后面的 case 标签只是标签,不会重新做条件判断;
如果没有 break;,程序会“穿透”到下一个 case 块中继续执行。
String type = "p4";
switch (type) {
case "p4":
System.out.println("Executing p4");
case "p5":
System.out.println("Executing p5");
break;
}
Executing p4
Executing p5
❓为什么会这样设计?
这是从 C 语言继承来的设计,目的是提供更灵活的流程控制。例如你可以有意地利用 fall-through 实现多个 case 共用一段逻辑。