Double.NaN não é um objeto, mas um valor primitivo.
É um valor especial de double, que é semelhante ao NULL do SQL - um valor que "não representa um número".
Como você deve saber, o NULL no SQL quer dizer "não disponível" ou "não informado" ou "não sabido"; não quer dizer "vazio".
E é por isso que você não consegue comparar uma coluna com NULL usando "=" ou "<>", porque NULL nunca é igual a NULL, mas NULL também não é diferente de NULL. Estranho, não? No SQL você é obrigado a usar "IS NULL" ou "IS NOT NULL" porque a comparação "= NULL" retorna NULL e a comparação "<> NULL" também retorna NULL.
Da mesma maneira, em Java e outras linguagens que aceitam o valor especial Not-A-Number, nada é igual a NaN, mesmo o NaN.
É um “não-número” realmente esquisito; para maiores detalhes, leia este artigo na Wikipedia.
(Acho que é mais fácil entender o +Infinity ou o -Infinity, que são realmente números. Mas uma coisa que é um “não-número” é estranha, porque não ensinam isso nas aulas de matemática, só em cálculo numérico. Por isso é que eu comparei com o SQL, onde existe o NULL que tem um comportamento parecido com o NaN.)