1. ホーム
  2. java

[解決済み] シングルスレッドで「while (i == i) ;」が非無限ループになるのはなぜか?

2022-06-23 15:04:42

質問

答えられない質問を受けました。

Javaでこのようなループ定義があったとします。

while (i == i) ;

の型は何ですか? i の値は i は、ループが無限ループでない場合、そして プログラムが1つのスレッドしか使っていない場合 ?

どのように解決するのですか?

double i = Double.NaN;

のAPIは Double.equals() のAPIは、答えを綴ります: "Double.NaN==Double.NaNは、値false"を持ちます。これは、Java言語仕様の".Double.NaN==Double.NaNは値falseである、というように詳しく書かれています。 浮動小数点の型、形式、および値 という項目で詳しく説明されています。

NaN は順序付けされないので、数値の 比較演算子 < , <= , > そして >= を返す false どちらか一方または両方が オペランドが NaN . 等号演算子 等号演算子 ==false もし どちらかのオペランドが NaN である場合、そして 不等号演算子 !=true もし どちらかのオペランドが NaN . において 特に x!=xtrue もし もし xNaN であり、かつ (x<y) == !(x>=y) は である false もし x または yNaN .