最近在做Maximo的过程中,反编译一个Class之后,得到的源码无任何语法错误,但是编译回去之后,运行时却报Stack OverflowError,经过努力发现原来Java反编译在类型转换过程中存在问题。
例:源码如下:
public void setValue(int value){
setValue( (long)value);
}
public void setValue(long value){
this.longvalue = value;
}
以上代码,运行不会出错,但经过编译后,再将类进行反编译得到的源码如下:
public void setValue(int value){
setValue(value);
}
public void setValue(long value){
this.longvalue = value;
}
由此我们看到,反编译之后,将long类型直接转换为int类型了,所以setValue(int value)函数将出现递归死循环,导致Stack OverflowError也就很正常了。
反编译会出现类型转换错的,还包括将double与float类型之间的转换,至于其它的类型是否还会出错,暂时没有做深入研究。
2008年7月5日星期六
JAVA反编译探讨-类型转换
订阅:
博文评论 (Atom)
0 comments:
发表评论