为什么java中的long不需要后缀?

问题描述 投票:0回答:1

在写代码的时候,我注意到long(primitive)数据类型不需要后缀l或L,我的代码编译后运行正常。谁能解释一下这背后的逻辑?先谢谢你了...

long l=435; //Complies and Run fine 
java long-integer primitive
1个回答
6
投票

当你这样做时。

long l=435;

编译器认为它是一个 int,然后,由于你给的数据类型是一个 long所以,它确实 自动转换long 数据类型。所以你不需要后缀。

然而,如果你用一个很长的数字来尝试,比如。

long l = 9999999999;

编译器会抛出一个错误(过大). 因为,它会试图将其视为一个。int但它太大,不可能是一个 int. 所以,在这里,你需要一个后缀。如果你这样做,

long l = 9999999999L;

那么它就会被编译。简单的说,一个只能装在 long 数据类型。


2
投票

因为int类型可以自动转换为long。


0
投票

试着给一个真正的bug号,如 long l = 0xFFFFFFFFF;.

当你初始化一个像0xFFFFFFFFF这样的文字时,如果没有后缀,而且变量是一个积分类型(int,long等),那么这个值被认为是一个 int. 而且,一个 int 可以容纳32位,而不是36位(9 x 1)。0xF = 9 x '1111'),就像你输入 long l = 0xFFFFFFFFF;. 所以,你必须使用一个 long 的容量为64位。在值的末尾添加'L'或'l',比如0xFFFFFFFFFL,应该可以解决编译器的错误。[参考资料]

一般情况下,由于类型转换为long的过程还是会发生,所以最好是明确地说明这一点 L.

© www.soinside.com 2019 - 2024. All rights reserved.