在编写代码时,我注意到长整型(primitive)数据类型不需要具有后缀l或L。我的代码可以编译并运行良好。有人可以解释一下这背后的逻辑吗?谢谢!
long l=435; //Complies and Run fine
long l=435; //Complies and Run fine
当你执行以下操作:
long l=435;
编译器将其视为“int”,然后,由于您给定的数据类型为“long”,因此它会对“long”数据类型进行自动转换。所以您不需要后缀。long l = 9999999999;
编译器将会抛出一个错误 (整数过大)。因为编译器会尝试将其视为 int
,但它太大了,无法表示为 int
。因此,在这里,你需要一个后缀。如果你这样做:long l = 9999999999L;
那么它将会被编译。
简单地说,对于只能适配long
数据类型的数字,需要添加后缀。
因为 int 类型可以自动转换为 long 类型。
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
。