YYW'S BLOG

知识的分享就是知识的获得
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

[JAVA]你见过这样的switch吗?

Posted on 2008-03-10 21:54  阿武  阅读(503)  评论(0编辑  收藏  举报


下面这段代码:

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;
  }

 }

}


你觉得它会输出什么呢? 或者你没有猜错, 它输出了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;
}


我惊讶地发现它竟然输出了如下结果:
default
1

还是break语句的问题, 当程序在case中找不到匹配项的时候会跳转到default语句块执行, 由于default语句块里面没有break的跳出语句, 程序将继续向下执行, 直到遇到一个break, 虽然我们平时我们做项目的时候有严格的编码规范, 一般不会遇到诸如此类的问题, 但是我在面试的时候就遇到了, 而且当时心一慌就答错了, 当然甚至还怀疑这是否能编译通过.


不过在.NET中强制要求在default的末尾追回break语句, 所以这个问题在.NET平台下不会出现.