Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

According to the JLS:

"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."

...

Code Block
bgColor#ccccff
public class NaNComparison {
  public static void main(String[] args) {
    double result = Double.NaN;
  if(Double.isNaN(result)) 
    System.out.println("Both are equal");
  }
}

Risk Assessment

Comparisons with NaN values may lead to unexpected results.

Rule

Severity

Likelihood

Remediation Cost

Priority

Level

EXP01-J

low

unlikely

medium

P??

L??

Automated Detection

TODO

Related Vulnerabilities

Search for vulnerabilities resulting from the violation of this rule on the CERT website.

References

Wiki Markup
\[[JLS 05|AA. Java References#JLS 05]\] Section 4.2.3 Floating-Point Types, Formats, and
Values
Findbugs FE: Doomed test for equality to
 Values
\[[FindBugs 08|AA. Java References#FindBugs 08]\] FE: Doomed test for equality to NaN