为什么我们到此为止都有L,我知道这是一个字面值,但是如果数据类型仍然很长,那么是否需要它?
public const long l = 100000000L;
这会产生什么不同吗?
public const long l = 100000000;
答案 0 :(得分:1)
spec中的2.4.4.2:
整数文字的类型确定如下:
•如果 字面量没有后缀,它具有这些类型中的第一个, 值可以表示为:int,uint,long,ulong。
•如果文字是 以U或u为后缀,它是其中第一个类型,其值 可以表示为:uint,乌龙。
•如果文字后缀为L或 l,它具有这些类型中的第一个,其值可以是 代表:长乌龙。
•如果文字带有UL,Ul,uL后缀, ul,LU,Lu,lU或lu,它是ulong类型。
正因为如此,L
被推断出来(“如果文字没有后缀”),因此它不是必需。您的两个示例将完成完全相同的操作(一旦编译)。
为什么您会使用L?好吧,一个例子可能是:
public const long doesNotCompile = 3000000000 * 2;
public const long doesCompile = 3000000000L * 2;
在第一行中,文字(即3000000000
)是uint
(由于2.4.4.2),而在第二行中,则是long
(同样由于2.4 .4.2-由于已明确指定。)
这意味着编译器将允许doesCompile
进行编译,但不会允许doesNotCompile
进行编译。 这是因为3000000000 * 2
太大而无法放入uint
内。
但是对于基本用法(如您的用法)来说,它是直接分配的-那么是的,它不需要任何方式。不包括它也没有不利之处。
答案 1 :(得分:0)
两者都将输出相同的IL:调用int64
构造函数:int64(100000000)
。
答案 2 :(得分:-1)
它的解释是here。可能的主要目的是区分重载方法的long和int参数。
答案 3 :(得分:-1)