FIX: Comparision with Zero Generates Bad Code

ID: Q156913


The information in this article applies to:
  • Microsoft Visual J++, version 1.0


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); 


REFERENCES

For the latest Knowledge Base articles and other support information on Visual J++ and the SDK for Java, see the following page on the Microsoft Technical Support site:

http://support.microsoft.com/support/visualj/

http://support.microsoft.com/support/java/

Additional query words: comparison

Keywords : kbCommandLine kbVJ100bug kbVJ110fix
Version : WINDOWS:1.0
Platform : WINDOWS
Issue type : kbbug


Last Reviewed: December 22, 1999
© 2000 Microsoft Corporation. All rights reserved. Terms of Use.