Consider simple example
private static String isPositive(int val) {
    if (val > 0) {
        return "yes";
    } else {
        return "no";
    }
}
Here it's pretty straightforward: if val > 0 return yes else return no.
But after compilation, in bytecode, this if condition is reversed:
  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
It checks: if val <= 0 then return no, else return yes.
First, I thought that <= check is cheaper, and it's some kind of optimization. But if I change my initial code to
if (val <= 0) {
    return "no";
} else {
    return "yes";
}
it still will be reversed in bytecode:
   L0
    LINENUMBER 12 L0
    ILOAD 0
    IFGT L1
   L2
    LINENUMBER 13 L2
    LDC "no"
    ARETURN
   L1
    LINENUMBER 15 L1
   FRAME SAME
    LDC "yes"
    ARETURN
So, is there a reason for such behavior? Can it be changed to straightforward?
 
     
     
    