¿Por qué Double.NaN == Double.NaN devuelve falso?

Estaba estudiando preguntas de OCPJP y encontré este código extraño: public static void main(String a[]) { System.out.println(Double.NaN==Double.NaN); System.out.println(Double.NaN!=Double.NaN); } Cuando ejecuté el código, obtuve: false true ¿Cómo es la salida falsecuando estamos comparando...