问题描述
我正在通过Herbert Schildt的“面向初学者的Java”书来学习Java。 可以说,由于命运变量是兼容的并且足够大以存储原始变量,因此可以进行自动转换。
就是说,一个Int应该能够存储Float,反之亦然,因为它们都具有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不能存储一个浮点呢?
1楼
因为float还在小数点后也包含数字,而int不包含数字。 没有这个,您也不能通过将浮点数也显式转换为int来简单地修剪数字的小数部分。
2楼
如您所见,您可以将int
存储到float
,但是不能将float
放入int
。
这是因为float的内部结构是一个十进制数,而int顾名思义是整数。
有关更多信息,您可以查看有关 。
3楼
一个Int应该能够存储Float,反之亦然,因为它们都具有4个字节的大小。
数据的大小不是重要的部分。
而是关于可以存储在给定字节数中的值。
int
只能存储-2 ^ 31和2 ^ 31-1之间的整数值。
另一方面, float
可以存储十进制值。
4楼
如果整数值将在float可以存储的最大整数值的范围内,则int到float永远不会是有损转换,因为float值将始终存储/转换为<intvalue>.0
例如4
将被存储为4.0
。
但是,如果从float转换为int,您的分数值将丢失,因此JVM会给您此类错误。
如果冒这样的风险,则必须将float值显式转换为int。