我有一个方程j + f * d
,其中j = 4 long
、f = 5.0F float
和d = 6.0 double
,答案是34.0 double
我理解34.0是double
。
我不明白这个方程怎么会变成34.0,5.0F != 5
在用它相乘时是不是?
J = 4 (long)
f = 5.0F (float)
d = 6.0 (double)
操作顺序优先。乘法发生在加法之前。
j + f * d
4 + 5.0 * 6.0
4 + 30.0
34.0
此链接详细说明了Java运算符的优先级。记住以下内容是很好的信息:http://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html
除了Kon提到的操作顺序之外,double
实际上是唯一不会失去精度的类型,因为6.0已经是double
了。Java不会尝试根据输出类型中包含的值来降级输出类型。它只使用与输入类型兼容的最小类型。由于您已经有了double
("最大"的基元数据类型,即具有最大的数字范围),Java会输出它。
所以,从某种意义上说,5.0f
和5
不一样是正确的(实际上,不仅仅是乘法)。CCD_ 13是一个整数类型;5.0f
是浮点型。Java不会自动将结果降级为不能容纳那么多不同数字的数据类型。
(不要接受这个答案。Kon的信息更重要。)