How can “while (i == i) ;” be a non-infinite loop in a single threaded application?

double i = Double.NaN;

The API for Double.equals() spells out the answer: “Double.NaN==Double.NaN has the value false”. This is elaborated in the Java Language Specification under “Floating-Point Types, Formats, and Values”:

NaN is unordered, so the numerical
comparison operators <, <=, >, and >=
return false if either or both
operands are NaN. The
equality operator == returns false if
either operand is NaN, and the
inequality operator != returns true if
either operand is NaN. In
particular, x!=x is true if and only
if x is NaN
, and (x<y) == !(x>=y) will
be false if x or y is NaN.

Leave a Comment

Hata!: SQLSTATE[HY000] [1045] Access denied for user 'divattrend_liink'@'localhost' (using password: YES)