2016-11-15 86 views
1

比方说,我声明这个变量:有人可以向我解释为什么L(long)必须在那里吗?

long k = 1060606060000; 

如果我这样做,我得到一个错误,因为数字显然是要大的整数。为什么我必须在编译器的最后添加L以识别它是一个长变量?尽管我明显地说我需要k是长型的。

+2

因为添加L,你告诉相似的“嘿顺便说一句,这是一个长类型......” –

+0

那么为什么还要在开头添加长长呢? – Geddi

+0

@Geddi如果你有一个数字不是“明显”太长以至于不能像'0'那样适合'int',你会如何指定它是一个长文字?那么,为什么有两种方法来指定一个长文字,当你可以有一个? –

回答

2

因为文字值将始终被解释为int,如果没有附加lL

如果没有指定l,您应该将文字int分配给类型为long的变量。

在编译时,编译器首先检查文字值,如果没有追加lL,则它会将其解释为int

现在,如果数量大于Integer.MAX_VALUE,编译器将显示错误。

+0

但我显然声明我的变量只要,因为我的数字可以扩展int的范围。为什么编译器不会自动投射那么久? – Geddi

+0

将此视为两个步骤的过程。首先编译器检查文字,然后将文字的赋值应用于引用。编译错误(当不附加'L' /'l'时)将在检查文字值时发生。 – Mena

+0

好的谢谢。这是否有背景知识?我觉得这不是最实用的方法吗? – Geddi

相关问题