出于好奇,我刚刚使用DJ Java Decompiler以及CAVAJ Java Decompiler (Java 版本为 1.7)反编译了下面的代码,这是正常的源代码:
byte a = 10;
a = (byte) (a +1);
byte b = 10;
b = b++;
byte c = 10;
c +=c;
System.out.printf("a=%d \t b=%d \t c=%d\n",a,b,c);
其中显示输出为:a=11 b=10 c=20
这是反编译的:
byte a = 10;
a++;
byte b = 10;
b++;
b = b;
byte c = 10;
c += c;
System.out.printf("a= %d \t b = %d \t c = %d\n", new Object[] {
Byte.valueOf(a), Byte.valueOf(b), Byte.valueOf(c)
});
其中作为源代码输出为:a=11 b=11 c=20
byte
更清楚地说,这与发生的同样事情无关int
,我什至在在线编译器IDEONE中检查了上述代码,并给出了与我相同的输出。
那么,反编译器是产生错误的代码还是别的什么?