为什么在switch语句中的"default"之后执行错误的"case"

sha*_*del 0 java

输出怎么可能是1002,为什么尽管不匹配,最后一个案例仍在执行?

public class Main {
    public static void main(String[] args) {
        int i=0,j=0;
        switch (i) {
            case 2 : j++;
            default: j+=2;
            case 15 : j+=1000;
        }
        System.out.println("j="+j);
    }
}
Run Code Online (Sandbox Code Playgroud)

PSR*_*PSR 8

通电路:

另一个兴趣点是break语句.每个break语句都会终止封闭的switch语句.控制流继续切换块后面的第一个语句.break语句是必需的,因为没有它们,switch块中的语句都会失败:匹配的case标签之后的所有语句都按顺序执行,而不管后续case标签的表达式,直到遇到break语句.

你的代码应该是:

  case 2 : j++; break;
  case 4:  j+=10; break;
  default: j+=2; break;
  case 15: j+=1000;
}
Run Code Online (Sandbox Code Playgroud)

FROM DOCS

public class Example{

public static void main(String[] args) {
    java.util.ArrayList<String> futureMonths =
        new java.util.ArrayList<String>();

    int month = 8;

    switch (month) {
        case 1:  futureMonths.add("January");
        case 2:  futureMonths.add("February");
        case 3:  futureMonths.add("March");
        case 4:  futureMonths.add("April");
        case 5:  futureMonths.add("May");
        case 6:  futureMonths.add("June");
        case 7:  futureMonths.add("July");
        case 8:  futureMonths.add("August");
        case 9:  futureMonths.add("September");
        case 10: futureMonths.add("October");
        case 11: futureMonths.add("November");
        case 12: futureMonths.add("December");
        default: break;
    }

    if (futureMonths.isEmpty()) {
        System.out.println("Invalid month number");
    } else {
        for (String monthName : futureMonths) {
           System.out.println(monthName);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

}

This is the output from the code:

August
September
October
November
December
Run Code Online (Sandbox Code Playgroud)