3つの実数の値を宣言し、それぞれの値を以下のコードと比較しようとしました。最初の比較(d==f
)においてdouble型の値の比較
public class Main {
public static void main(String[] args) {
float f = 0.1f;
double d= 0.1;
double d2 = (double)f;
System.out.println(d);
System.out.println(d2);
System.out.println();
System.out.println(d==f);
System.out.println(d==d2);
System.out.println(d2==f);
}
}
、d
はf
はfloat型であるため、コンパイラはダブル型に可変f
を変え、一方double型であるからです。これは、f
に格納されている値がdouble型の値に再割り当てされることを意味します。したがって、この比較はfalseを返します。また、d==d2
比較が実行され、最初の比較で同じ方法でfalseが返されます。
ただし、最後の比較d2==f
はtrueを返します。変数f
がdouble型の値に再割り当てされ、d2
とf
に格納されている値が少し違うので、私はfalseを返すと予想しました。しかし、結果は真です。
第3の比較が真実を示した理由を説明できますか?
'System.out.println((float)d == f);と' System.out.println((float)d == d2);のように最初の2つを変更すると、 「本当」でも。 –