Double.NaN==Double.NaN が false を返すのはなぜですか? 質問する

Double.NaN==Double.NaN が false を返すのはなぜですか? 質問する

私はちょうどOCPJPの問題を勉強していたのですが、この奇妙なコードを見つけました:

public static void main(String a[]) {
    System.out.println(Double.NaN==Double.NaN);
    System.out.println(Double.NaN!=Double.NaN);
}

コードを実行すると、次の結果が得られました。

false
true

false同じように見える 2 つのものを比較した場合の出力はどうなりますか? どういうNaN意味ですか?

ベストアンサー1

NaN は「非数」を意味します。

Java言語仕様(JLS)第3版では、:

オーバーフローする演算では符号付き無限大が生成され、アンダーフローする演算では非正規化値または符号付きゼロが生成され、数学的に明確な結果がない演算では NaN が生成されます。オペランドとして NaN を使用するすべての数値演算では、結果として NaN が生成されます。すでに説明したように、NaN は順序付けされていないため、1 つまたは 2 つの NaN を含む数値比較演算では が返されfalse、NaN を含むすべての!=比較では がNaN の場合trueも含め が返されます。x!=xx

おすすめ記事