在Java中为long和float原始类型赋值

时间:2016-02-28 12:03:52

标签: java

我有一个关于在Java中声明一个长变量的问题:

这编译:{{1​​}}
这给出了编译器错误:long x = 10;
这编译:{{1​​}}
为什么在第一种情况下我不需要在数字后加一个L?这与编译器自动将long转换为int值有什么关系(因为Iguess是第一个例子中发生的事情)?

关于浮动的同样问题:

这不会编译:{{1​​}}
这编译:{{1​​}}
这会编译:{{1​​}}

为什么第一个例子没有编译?为什么第二个例子中不需要f前缀?这与编译器自动转换为双精度有什么关系?

提前致谢!

1 个答案:

答案 0 :(得分:5)

没有任何后缀的数字常量具有默认类型。如果它们是整数(即它们没有浮点),则默认类型为int。如果它们具有浮点,则默认类型为double

因此,没有L后缀(表示long字面值)的整数常量不能大于Integer.MAX_VALUE,而double常量10.1可以&如果没有明确的强制转换,就会被分配到float变量。

另一方面,可以将int 10分配给float变量以及float 10.1f