出于好奇,我使用 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中检查了以上代码,并得到了与我的输出相同的结果。那么,反编译器是产生了错误的代码,还是其他问题?
b=b++;
更改为b++;b=b;
。 - Denys Séguret