读书人

switch-case的编译有关问题

发布时间: 2011-11-29 22:04:11 作者: rapoo

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

读书人网 >J2SE开发

热点推荐