为什么Java中的长整型不需要后缀?

3
在编写代码时,我注意到长整型(primitive)数据类型不需要具有后缀l或L。我的代码可以编译并运行良好。有人可以解释一下这背后的逻辑吗?谢谢!
long l=435; //Complies and Run fine 

尝试使用一个非常长的数字... - dryairship
3个回答

11

当你执行以下操作:

long l=435;
编译器将其视为“int”,然后,由于您给定的数据类型为“long”,因此它会对“long”数据类型进行自动转换。所以您不需要后缀。
但是,如果您使用一个非常长的数字,例如:
long l = 9999999999;
编译器将会抛出一个错误 (整数过大)。因为编译器会尝试将其视为 int,但它太大了,无法表示为 int。因此,在这里,你需要一个后缀。如果你这样做:
long l = 9999999999L;

那么它将会被编译。

简单地说,对于只能适配long数据类型的数字,需要添加后缀。


2

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


1
尝试分配一个真正的大数,比如long l = 0xFFFFFFFFF;。 当您初始化类似于0xFFFFFFFFF的文字时,如果没有后缀并且变量是整型(int,long等),则假定该值为int。 而且,int只能容纳32位,而不是36位(9 x 0xF=9 x '1111'),如果您键入long l = 0xFFFFFFFFF;,则会尝试使用36位。 因此,您必须使用具有64位容量的long。 在值的结尾添加'L'或'l',例如0xFFFFFFFFFL,应解决编译器错误。[参考资料] 一般来说,由于类型转换到long将无论如何发生,因此最好明确指出L

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接