以下代码打印出1,2,3
,如果我更改int i = 3;
,则会打印出3
。我想知道这背后的原因。我使用了调试器,似乎i = 3
它转到案例3并打印出3然后程序终止。我相信i=5
时它会转到default
,这是否意味着{{1}都属于case 1,case 2 and case 3
子句?
default
编辑:
这个问题来自测试,它要求输出此代码。所以我想弄清楚为什么输出是int i = 5;
switch(i){
default:
case 1:
System.out.println(1);
case 2:
System.out.println(2);
case 3:
System.out.println(3);
}
,我理解1,2,3
是必需的,但这不是我想要的答案。
答案 0 :(得分:7)
i == 5
与您的任何case
都不匹配,因此控件转到default
子句。
default
子句为空,没有break
语句,并且会立即falls through到代码中的case
- case 1
。
case 1
打印"1"
,因为它也没有break
语句,所以会落到case 2
,依此类推。
case
s 1
,2
,3
不属于至default
- 重要的是他们的订单。< / p>
如果您要重新排序交换机statement
并将default
子句写为最后一个,则不会打印任何内容。
答案 1 :(得分:0)
如果您在任何情况下没有中断或默认,它将会发生故障,直到找到中断或结束时为止。所以在你的情况下,因为你没有默认的中断,所以它一直到最后。如果没有中断,您的程序将打印1,2,3 for i&gt; 3.