我准备ocpjp。
我知道:
byte * byte = int
long * int = long
但我想知道float * float = float
float on float可能是一个非常庞大的数字,并且逻辑上将它转换为double。
无论如何,为了成功通过考试,我应该知道有关它的所有规则。
请解释这些规则或仅指向相关的jls部分。
答案 0 :(得分:1)
我认为JLS的相关部分是4.2.4 Floating-Point Operations :
如果数值运算符的至少一个操作数是double类型,则使用64位浮点运算执行运算,并且数值运算符的结果是double类型的值。如果另一个操作数不是double,则首先将其扩展(第5.1.5节)以通过数字提升键入double(第5.6节)。
否则,使用32位浮点运算执行运算,并且数值运算符的结果是float类型的值。(如果另一个操作数不是浮点数,它首先被扩展为通过数字提升键入float。)
因此,如果将两个float
值相乘,则执行32位操作。如果值太大,将发生溢出到无穷大。
如果您将float
乘以double
,则结果将为double
,并且float
将在操作期间扩展为64位值。
答案 1 :(得分:0)
由于我的调查,我创建了以下规则:
if (statement contains double)
result-double
else if (statement contains float)
result-float
else if (statement contains long)
result - long
else
result - int