Java:浮点,长本地初始化
我一直假设,而且我相信我有经验,在Java中用原始数字初始化long或float本地原语会产生编译器错误 例如 写上述内容的正确方法是Java:浮点,长本地初始化,java,compilation,primitive,local-variables,Java,Compilation,Primitive,Local Variables,我一直假设,而且我相信我有经验,在Java中用原始数字初始化long或float本地原语会产生编译器错误 例如 写上述内容的正确方法是 float f = 10f; long l = 5l; 然而,我现在发现编译器在没有f和l免责声明的情况下愉快地编译。我遗漏了什么吗?工作正常,因为您分别隐式执行从int到float和long 但是,这不会编译,您需要添加一个f或L以使其工作: float f = 1.0; //can't convert from double to float long l
float f = 10f;
long l = 5l;
然而,我现在发现编译器在没有f和l免责声明的情况下愉快地编译。我遗漏了什么吗?工作正常,因为您分别隐式执行从
int
到float
和long
但是,这不会编译,您需要添加一个f
或L
以使其工作:
float f = 1.0; //can't convert from double to float
long l = 12345678912; //12345678912 is not a valid int
如果您编写的整数文本可转换为目标数据类型,那么它将被隐式转换成Java中的“fits-into”关系(我们感兴趣的类型)。图表看起来像
double
/ \
float long
\ /
integer
因此,在您的例子中,整数10和5适合于
float
,以及double
,因此隐式转换工作正常,代码编译良好。但是,10L
属于long
类型,不适合int
。与2.0
相同,它是double
,如果没有显式强制转换,则无法将其分配到float
。自动加宽。10为int,转换为float。同样地,对于5.这个问题现在得到了回答(因此延迟接受)
double
/ \
float long
\ /
integer