【发布时间】:2013-01-18 18:48:48
【问题描述】:
出于好奇,我刚刚使用 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 中检查了上述代码,并给出了与我相同的输出。
那么,是反编译器产生了错误的代码还是别的什么??
【问题讨论】:
-
我不明白在第二种情况下额外的空格是如何从输出中消失的。
-
@dystroy 这可能是 Decompiler 的编辑器格式化代码的功能
-
这可能应该在 CAVAJ 的论坛中讨论,因为它看起来是一个反编译错误。
-
@Anony-Mousse 我想他担心反编译器将
b=b++;更改为b++;b=b;。 -
是的,看起来像一个 CAVAJ 错误。 这里我们无能为力。
标签: java decompiler