java - Switch 语句默认情况失败

标签 java scjp

这里有一个小小的困惑,请原谅我的无知。这是一个代码片段。

public class SwitchTest {
    public static void main(String[] args) {

        int x = 2;

        switch (x) {
            case 1:
                System.out.println("1");
                break;
            default:
                System.out.println("helllo");
            case 2:
                System.out.println("Benjamin");
                break;

        }

    }
}

在这里,如果 x 的值为 2,则只打印 Benjamin。那很好。现在让我们假设,我将 x 的值更改为 3,不匹配任何情况,而不是 它从默认情况下失败。编译器不需要为 3 匹配所有情况,到那时 CASE 2 将通过,而不是为什么它返回默认值并打印 hello Benjamin。有人可以解释一下吗?

谢谢,

最佳答案

您需要添加一个 break; 语句来跳出 switch block 。

switch (x) {
    case 1:
        System.out.println("1");
        break;
    default:
        System.out.println("helllo");
        break; // <-- add this here
    case 2:
        System.out.println("Benjamin");
        break;

    }

一般来说,将default: case 设置为switch block 中的最后一个 case 也是更好的编码习惯。

在这种情况下,开关遵循以下模式:

x==1? No, check next case
default? Not done yet, check other cases
x==2? No, check next case
//No more cases, so go back to default
default? Yes, do default logic
// no break statement in default, so it falls through to case 2: logic without checking the case
output case 2 logic
break

注意 block 将如何跳过默认情况,并将其保存到稍后,除非我们已经用尽所有其他可能的情况。

关于java - Switch 语句默认情况失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28073899/

相关文章:

java - 我如何解析我的日期范围然后检查冲突?

java - 创建动态元素自定义

Java 无法访问的 catch block 编译器错误

java - 为什么我们需要一个静态锁来同步system.out.println()?

java - SCJP 需要适当的指导

java - Android onTap Intent 数组

java - 使用java从XML中查找重复的实体标签

java - 理解 wait()

java - SCJP-- 数字格式

java - 泛型方法使用类型作为参数