不同的数据类型操作加倍

我知道,当与Java中的运算符以及不同的数据类型有关时,结果会推广到更大的数据类型。因此,因为double大于float,所以举例时

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

结果z + w将是双重类型。 如果我不把浮点数据类型放在F上,那么浮点数就是双倍的。

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

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);

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

为什么在这种情况下编译,因为我们有一个双精度和浮点数之间没有F的操作?

我似乎无法理解这种情况,你能帮助我吗?


float w = 2.1;  // error

默认情况下 ,2.1是双字面值。

编译器希望从你身边获得一个保证,即你已经准备好执行缩小转换,这就是为什么它在文字之后会有一个F(或f)。

如果你没有使用F (OR f ),将会导致编译错误。

float y = 13;   // works successfully.

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

链接地址: http://www.djcxy.com/p/73657.html

上一篇: Different Data Types Operations double

下一篇: Do Java 8 default methods break source compatibility?