不同的数据类型操作双浮动

时间:2016-11-26 11:59:16

标签: java compilation floating-point double

我知道当与Java中的运算符和不同的数据类型有关时,结果是推广到更大的数据类型 因此,因为double大于float,例如

double z=39.21;
float w=2.1F;
System.out.println(z+w );

结果z + w将是双重类型。 如果我不将F放在浮点数据类型上,则假定浮点数为double。

那么为什么下面的代码不能编译?

double z=39.21;
float w=2.1;
System.out.println(z+w );

如果z和w都被认为是双倍,那么结果不应该是双倍的吗? 相反,它抛出:

Arithmetic.java:26: error: incompatible types: possible lossy conversion from double to float 
float w=2.1; 
        ^ 
1 error

此外,

short x = 14;
float y = 13;
double z = 30;
System.out.println( x * y / z);

首先,short被转换为int。然后int转换为Float。然后乘法发生。

为什么在这种情况下编译,因为我们在double和float之间有一个操作而没有F ??????

我似乎无法理解你可以帮助我吗?

1 个答案:

答案 0 :(得分:1)

float w = 2.1;  // error

默认,2.1是双字面文字。

编译器希望您方保证您已准备好执行缩小转换,这就是为什么它希望在文字后面有F(或f)。

如果您没有放置F(或f),则会导致编译错误。

float y = 13;   // works successfully.

然而,在另一种情况下,13是整数文字。因此,它很容易进入浮动类型。因此,代码可以成功运行。