首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

switch-case的编译有关问题

2011-11-29 
switch-case的编译问题以下代码,用eclipes编译后反编译,发现会自动补齐,没有出现的case数字:public int me

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就会生成这张表,然后会把其中的补齐。更加详细的案情还不甚清楚,可以顺着这个线索继续调查,直到找到凶手为止!:)

热点排行