Java:浮点,长本地初始化

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

我一直假设,而且我相信我有经验,在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 = 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