我正在研究赫伯特·席尔特(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。