数学表达式中的类型计算

时间:2014-06-06 08:45:58

标签: java types type-conversion

我准备ocpjp。

我知道:

byte * byte = int 

long * int = long

但我想知道float * float = float

float on float可能是一个非常庞大的数字,并且逻辑上将它转换为double。

无论如何,为了成功通过考试,我应该知道有关它的所有规则。

请解释这些规则或仅指向相关的jls部分。

2 个答案:

答案 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