切换语句默认情况下降

时间:2015-01-21 18:05:29

标签: 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 to 3的值,与its a fall through from default case不匹配。 Ain的编译器需要匹配3的每个案例,到那时CASE 2将被传递,而不是为什么它返回默认并打印你好Benjamin。有人可以解释一下吗?

谢谢,

4 个答案:

答案 0 :(得分:4)

您需要添加break;语句才能突破switch阻止。

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:案例作为switch块中的最后一个案例也是更好的编码习惯。

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

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

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

答案 1 :(得分:2)

它会打印两个字符串,因为您的break案例中没有default,所以它会继续case 2,打印本杰明。您可以通过在break案例上方添加case 2或移动default来解决此问题。

答案 2 :(得分:1)

&#39;开关&#39; case是其他形式的&if; then-then-else&#39;,默认情况是最终的else部分。建议在交换机结束时写入默认值。

答案 3 :(得分:1)

默认选为最后一个。这就是为什么感觉编译器“回去了”。