我声明了三个实数值,并尝试将每个值进行比较,如下所示。
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
)中,由于d
是double类型而f
是float类型,因此编译器将变量f
更改为double类型。这意味着f
中存储的值将被重新分配为double类型值。因此,此比较返回false。而且,执行d==d2
比较并在第一次比较中以相同的方式返回false。
但是,最后一次比较d2==f
,它返回true。我希望它返回false,因为变量f
被重新分配到double类型值,d2
和f
中存储的值会略有不同。但结果是正确的。
你能解释为什么它给出真实的第三个比较吗?
答案 0 :(得分:0)
正如您所说,在比较double
和float
时,float
会转换为double
。
因此,让我们考虑一下在这种情况下你的变量会发生什么。
d2
是一个从浮点数转换而来的双精度型,f
是一个正在转换为双精度浮动的浮点数。
由于它们都以相同的方式从同一类型转换为相同的类型,因此转换的工作方式并不重要,它们都会评估相同的内容。
答案 1 :(得分:0)