如果我有如下表达式:
double d = floatVar / intVar;
intVar
将被提升为float
,然后返回的float
结果将转换为double
并分配给d
。但是如果我有一个长表达式会发生什么,例如:
double d = floatVar / intVar * shortVar + charVar + intVar2;
是否会将所有变量提升为float
,然后返回的float
结果将转换为double
并分配给d
?
如果我有以下内容:
double d = (floatVar / intVar) * shortVar + charVar + intVar2;
将intVar
转换为float
,而shortVar
和charVar
将转换为int
,然后返回int
来自shortVar + charVar + intVar2
的结果将转换为float
并与float
的返回(floatVar / intVar)
结果相乘,此返回的float
结果将转换为加倍并分配到d
?
答案 0 :(得分:2)
运营顺序适用。 /
和*
以及+
都是左关联的,/
和*
具有相同的优先级(大于+
的优先级),所以这个:
double b = floatVar / intVar * shortVar + charVar + intVar2;
相当于:
double b = (((floatVar / intVar) * shortVar) + charVar) + intVar2;
在每个步骤执行相应的转换:intVar
转换为float
,shortVar
转换为float
,charVar
转换为{ {1}},float
转换为intVar2
。最终结果将提升为float
。
另一方面,如果您要将double
括在括号中以强制执行该操作,那么charVar + intVar2
将被提升为charVar
(假设该范围int
的{{1}}符合char
的范围,就像您可能遇到的几乎所有系统一样,并且结果总和将转换为int
。