有人可以向我解释为啥 L(长)必须在那里吗? [复制]
Posted
技术标签:
【中文标题】有人可以向我解释为啥 L(长)必须在那里吗? [复制]【英文标题】:Can somebody explain to me why the L (long) has to be there? [duplicate]有人可以向我解释为什么 L(长)必须在那里吗? [复制] 【发布时间】:2016-11-15 14:00:21 【问题描述】:假设我声明了这个变量:
long k = 1060606060000;
如果我这样做,我会得到一个错误,因为这个数字对于一个整数来说显然太大了。为什么我必须在最后添加 L 才能让编译器识别它是一个长变量?尽管我显然说过我需要 k 是 long 类型。
【问题讨论】:
因为添加 L 你告诉编译器“嘿顺便说一句,这是一个长类型......” 那为什么还要在开头加长呢? @Geddi 如果您有一个“明显”不太长而无法放入int
的数字,例如0
,您将如何指定它是一个长文字?然后,为什么有两种方法来指定长文字,而你只能有一种?
所以如果你使用它,你的编译器就会知道它很长
开头的long
是指定变量的类型(而不是指定值的类型)。
【参考方案1】:
因为如果没有附加l
或L
,文字值将始终被解释为int
。
如果未指定l
,您将把文字int
分配给long
类型的变量。
在编译时,编译器首先检查文字值,如果没有附加l
或L
,它会将其解释为int
。
现在,如果数字大于Integer.MAX_VALUE
,编译器将显示错误。
【讨论】:
但我显然将我的变量声明为 long,因为我的数字可以扩展 int 的范围。那么为什么编译器不自动转换为 long 呢? 将此视为一个两步过程。首先编译器检查文字,然后将文字的赋值应用于引用。检查字面值时会出现编译错误(未附加L
/ l
)。
好的,谢谢。这有什么背景想法吗?我觉得这不是最实用的方法吧?
@Geddi 不确定我是否理解。如果无法将文字分配给int
,则在使用文字并分配给long
或Long
引用类型时,附加l
是 声明long
的方式。如果该值在int
范围内,那么您可以让转换完成它的工作,而不用打扰l
。
我想说的是 long 大于整数和下面的其他类型。因此,当我声明 long 类型的变量时,所有不扩展 64 位的数字都可以放入其中。那么,当它无论如何都可以放入时,为什么还要打扰文字的类型。抱歉,如果这听起来不合理,我显然是初学者。只是好奇。以上是关于有人可以向我解释为啥 L(长)必须在那里吗? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
有人可以向我解释一起使用的 Math.random() 和宽度/高度吗?
有人可以向我解释为啥我的 django 管理主题是黑暗的吗?