下面这段代码:
public class Programe {
public static void main(String[] args) {
int i = 2;
switch(i){
default:
System.out.println("default");
case 1:
System.out.println("1");
break;
case 2:
System.out.println("2");
break;
case 3:
System.out.println("3");
break;
}
}
}
public static void main(String[] args) {
int i = 2;
switch(i){
default:
System.out.println("default");
case 1:
System.out.println("1");
break;
case 2:
System.out.println("2");
break;
case 3:
System.out.println("3");
break;
}
}
}
你觉得它会输出什么呢? 或者你没有猜错, 它输出了2, 但是如果程序是这样写的呢?
int i = 20;
switch(i){
default:
System.out.println("default");
case 1:
System.out.println("1");
break;
case 2:
System.out.println("2");
break;
case 3:
System.out.println("3");
break;
}
switch(i){
default:
System.out.println("default");
case 1:
System.out.println("1");
break;
case 2:
System.out.println("2");
break;
case 3:
System.out.println("3");
break;
}
我惊讶地发现它竟然输出了如下结果:
default
1
还是break语句的问题, 当程序在case中找不到匹配项的时候会跳转到default语句块执行, 由于default语句块里面没有break的跳出语句, 程序将继续向下执行, 直到遇到一个break, 虽然我们平时我们做项目的时候有严格的编码规范, 一般不会遇到诸如此类的问题, 但是我在面试的时候就遇到了, 而且当时心一慌就答错了, 当然甚至还怀疑这是否能编译通过.
不过在.NET中强制要求在default的末尾追回break语句, 所以这个问题在.NET平台下不会出现.