Właśnie studiowałem pytania OCPJP i znalazłem ten dziwny kod:
public static void main(String a[]) {
System.out.println(Double.NaN==Double.NaN);
System.out.println(Double.NaN!=Double.NaN);
}
Kiedy uruchomiłem kod, otrzymałem:
false
true
Jaki jest wynik, false
gdy porównujemy dwie rzeczy, które wyglądają tak samo? Co to NaN
znaczy?
In [1]: NaN==NaN Out[1]: False
Double.NaN==Double.NaN
powinno rzeczywiście zwrócić prawdę, gdyby Double.NaN
były typu java.lang.Double
. Jednak jego typ jest prymitywny double
i obowiązują reguły operatora double
(które wymagają tej nierówności dla zgodności z IEEE 754, jak wyjaśniono w odpowiedziach).