日期:2014-05-20  浏览次数:20749 次

switch-case的编译问题
以下代码,用eclipes编译后反编译,发现会自动补齐,没有出现的case数字:
public int method(int arg){
  int ret = 0;
  switch(arg){
  case 1:
  ret = 1;
  break;
  case 3:
  ret = 3;
  break;
  case 7:
  ret = 1;
  break;
  case 9:
  ret = 1;
  break;
  case 11:
  ret = 1;
  break;
  default:
  ret = 12
  break;
  }
  return ret;
}
编译后:
public int method(int arg){
  int ret = 0;
  switch(arg){
  case 1:
  ret = 1;
  break;
  case 3:
  ret = 3;
  break;
  case 7:
  ret = 7;
  break;
  case 9:
  ret = 9;
  break;
  case 11:
  ret = 11;
  break;
  case 2:
  case 4:
  case 5:
  case 6:
  case 8:
  case 10:
  default:
  ret = 12
  break;
  }
  return ret;
}

有的时候就不会出现这种补齐状况,请问这是什么原因,有什么规律么?
谢谢。

------解决方案--------------------
探讨
具体的没有查到,不过初步有点儿线索了,犯人应该和编译器把switch中的分支做成跳转表有一些关系!目前感觉是分支数大于5就会生成这张表,然后会把其中的补齐。更加详细的案情还不甚清楚,可以顺着这个线索继续调查,直到找到凶手为止!:)