在编写一些代码时,我注意到长(原始)数据类型不需要后缀l或L.我的代码编译并运行正常。谁能解释这背后的逻辑?提前谢谢..
long l=435; //Complies and Run fine
答案 0 :(得分:3)
当你这样做时:
long l=435;
编译器将其视为int
,然后,由于您提供的数据类型为long
,因此自动转换为long
} 数据类型。所以你不需要后缀。
但是,如果您尝试使用非常长的数字,例如:
long l = 9999999999;
编译器将抛出错误(整数过大)。因为,它会尝试将其视为int
,但它太大而不能成为int
。所以,在这里,你需要一个后缀。如果你这样做:
long l = 9999999999L;
然后它会编译。
简单地说,一个只能放在long
数据类型中的数字需要一个后缀。
答案 1 :(得分:2)
因为int类型可以自动转换为long。
答案 2 :(得分:0)
尝试分配一个真正的错误号,例如long l = 0xFFFFFFFFF;
。
初始化像0xFFFFFFFFF这样的文字时,如果没有后缀且变量是整数类型(int,long等),则该值假定为int
。并且,int
可以保存32位,而不是36位(9 x 0xF
= 9 x '1111'
),就像您在键入long l = 0xFFFFFFFFF;
时尝试一样。因此,您必须使用容量为64位的long
。追加' L'或者' l'在0xFFFFFFFFFL之类的值的末尾应该处理编译器错误。 [Reference]
一般情况下,由于无论如何都会将类型转换为long,因此最好明确L
。