考虑简单的例子
private static String isPositive(int val) {
if (val > 0) {
return "yes";
} else {
return "no";
}
}
这里很简单: if val > 0
return yes
else return no
。但是在编译之后,在字节码中,这个 if 条件是相反的:
private static isPositive(I)Ljava/lang/String;
L0
LINENUMBER 12 L0
ILOAD 0
IFLE L1
L2
LINENUMBER 13 L2
LDC "yes"
ARETURN
L1
LINENUMBER 15 L1
FRAME SAME
LDC "no"
ARETURN
它检查:如果val <= 0
则返回no
,否则返回yes
。
首先,我认为<=
检查更便宜,并且是某种优化。但是如果我将我的初始代码更改为
if (val <= 0) {
return "no";
} else {
return "yes";
}
它仍然会在字节码中反转:
L0
LINENUMBER 12 L0
ILOAD 0
IFGT L1
L2
LINENUMBER 13 L2
LDC "no"
ARETURN
L1
LINENUMBER 15 L1
FRAME SAME
LDC "yes"
ARETURN
那么,有这种行为的原因吗?可以改成直截了当吗?