2008年7月5日星期六

JAVA反编译探讨-类型转换

  最近在做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类型之间的转换,至于其它的类型是否还会出错,暂时没有做深入研究。

0 comments:

发表评论

 
Friend JXKJ EAMPUB NIU-B China
CopyRight 2007-2009 WMZSOFT QQ