为什么Java中的“switch”依赖于“break”?

class switch1
{
    public static void main(String args[])
    {
        int a = 10;
        switch(a)
        {
            default: System.out.println("Default");
            case -1: System.out.println("-1");
        }
    }
}

我知道这个程序会执行“default”和“case -1”语句,因为在匹配条件之后没有指定break(在这种情况下,在“default”之后)。

但是我不明白的是

a)为什么在switch语句中需要break

b)为什么它甚至执行无效匹配条件的语句(即执行“case -1”))如果它所做的全部匹配?


有时你需要多个案例来执行相同的功能。 例如,我让用户指定模式1或模式32来表示32位模式,而模式2或模式64则指定64位模式。

switch (input) {

    case 1:
    case 32:
        /* Do 32-bit related code */
        break;
    case 2:
    case 64:
        /* Do 64-bit related code */
        break;
    default:
        System.out.println("Invalid input");

}

这就是休息很重要的原因。 他们告诉switch语句何时停止执行给定场景的代码。 此外,默认值通常用于交换机与任何情况不匹配的情况。


没有breakswitch语句可以让你做这样的事情:

// Compute the most significant bit set in a number from 0 to 7
int topBit = -1;
switch(n) {
case 0:
    topBit = 0;
    break;
case 1:
    topBit = 1;
    break;
case 2:
case 3:
    topBit = 2;
    break;
case 4:
case 5:
case 6:
case 7:
    topBit = 3;
    break;
}

本质上,它可以让你创建一组标签,并在顶部有一个条件让你跳到最初的标签一次。 之后,执行一直持续到break或到达switch末尾。 这种技术很老旧 - 从装配时开始就已经存在,并且由于被包含在C中已经进入了Java和其他几种语言。


break语句是必需的,因为如果没有它们,switch块中的语句会落空:匹配case标签之后的所有语句都将按顺序执行,而不管后续case标号的表达式如何,直到遇到break语句为止。

请查看以下文档:http://docs.oracle.com/javase/tutorial/java/nutsandbolts/switch.html

链接地址: http://www.djcxy.com/p/84493.html

上一篇: Why does "switch" in Java rely on "break"?

下一篇: Conditional break inside of switch case