浮动到int vs int浮动自动转换

  • 本文关键字:int 转换 vs java
  • 更新时间 :
  • 英文 :


我正在研究赫伯特·席尔特(Herbert Schildt)的"初学者的java"书。据说,作为命运变量兼容,足够大,可以存储一个来源,因此可以进行自动转换。

话虽如此,int应该能够存储一个浮点,反之亦然,因为它们都有4个字节大小。

public class MyClass {
    public static void main(String args[]) {
        int i = 10;
        float f = i;
        float ff = 10;
        int ii = ff; 
    }
}

但是,当编译时,此代码会产生以下错误:

/MyClass.java:15: error: incompatible types: possible lossy conversion from float to int
        int ii = ff; 
                 ^
1 error

为什么有兼容类型,足够大以互相存储,浮子可以存储int,但int不能存储浮点?

,因为浮点也包含小数点之后的数字,而int则没有。没有这个

int应该能够存储一个浮点,反之亦然,因为它们都有4个字节大小。

数据的大小不是重要的部分。相反,它是关于可以存储在字节数量中的值。int只能存储-2^31和2^31-1之间的整数值。另一方面,float可以存储十进制值。

如您所见,您可以将int存储到float中,但是您不能将float放入int中。

这个沉船是因为浮点的内部结构是小数数字,顾名思义,INT是整数。

有关更多信息,您可以查看有关浮点数如何存储在内存中的讨论。

float float永远不会是有损的转换,如果整数值将在float可以存储的最大整数值范围内,因为值将始终存储/转换为<intvalue>.0,例如CC_7存储为4.0。但是,如果从float转换为int,您的分数值将丢失,因此JVM会给您这样的错误。如果您可以承担这种风险,则必须明确将浮点数转换为int。

最新更新