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, falsegdy porównujemy dwie rzeczy, które wyglądają tak samo? Co to NaNznaczy?
In [1]: NaN==NaN Out[1]: False
Double.NaN==Double.NaNpowinno rzeczywiście zwrócić prawdę, gdyby Double.NaNbyły typu java.lang.Double. Jednak jego typ jest prymitywny doublei obowiązują reguły operatora double(które wymagają tej nierówności dla zgodności z IEEE 754, jak wyjaśniono w odpowiedziach).
gdzie,