发现反编译后的代码和源代码有些不一样的,如果版本拿的不对的话之前的工作就白做了,后来才知道原来是编译器在作怪,虚惊一场。
编译器不能百分百的将class文件还原成源文件,遇到不一样的地方,要分析一下不一样的地方有什么特征,想一想可能那些地方出了问题。
下面的代码有几处和源代码不一样:
//源代码
public int zero;
public String net;
public static final String COM="COMPANY";
public static final double PI =3.1415926535;
public void printVar(){
System.out.println(zero);
System.out.println(net);
System.out.println(COM);
System.out.println(PI);
}
//反编译后的代码
public int zero;
public String net;
public static final String COM = "COMPANY";
public static final double PI = 3.1415926535D; //源代码没有D
public void printVar(){
System.out.println(this.zero);
System.out.println(this.net);
System.out.println("COMPANY");//直接用值替换了变量名,
System.out.println(3.1415926535D);// 直接用值替换了变量名
}
有些时候try catch的处理也会出现不一致,还有不同的反编译工具处理得到的结果也不一样!
要怀疑,然后再证实,被证实的怀疑让我们收获。