Microsoft KB Archive/156913

= FIX: Comparision with Zero Generates Bad Code =

Article ID: 156913

Article Last Modified on 5/12/2007

-

APPLIES TO


 * Microsoft Visual J++ 1.0 Standard Edition

-



This article was previously published under Q156913



SYMPTOMS
The following code sets the Boolean to true, whereas the correct value is false: int i = 0; boolean b = (0 < i); b is set to true.



CAUSE
This problem is due to bad code generated by the compiler.



WORKAROUND
Change the above code as shown below: int i = 0; boolean b = (i > 0);



STATUS
Microsoft has confirmed this to be a problem in the Microsoft products listed at the beginning of this article. This problem has been fixed in Visual J++ 1.1.



MORE INFORMATION
The problem occurs only when 0 is the literal on the left side of the operator. If the left side of the operator is a variable or a literal other than 0, then the expression is evaluated correctly. The following expressions are evaluated correctly: int i = 0; int j = 0;

boolean b = (i < j);

i++;

b = (1 < i); Some of the common places where you might run into this bug are in conditional statements or loops.

Steps to Reproduce Problem
Use the following code to reproduce the problem: int i = 0; boolean b = (0 < i);

