Java 有人能给我解释一下为什么L(长)必须在那里吗?
假设我声明了这个变量:Java 有人能给我解释一下为什么L(长)必须在那里吗?,java,variables,Java,Variables,假设我声明了这个变量: long k = 1060606060000; 如果我这样做,我会得到一个错误,因为对于一个整数来说,这个数字显然太大了。为什么我必须在末尾添加L,编译器才能识别它是一个长变量?尽管我显然说过我需要k是long的类型 因为如果未附加l或l,文字值将始终被解释为int 如果未指定l,则将向long类型的变量分配一个literalint 在编译时,编译器首先检查文本值,如果未附加l或l,则将其解释为int 现在,如果该数字大于Integer.MAX\u VALUE,编译器将
long k = 1060606060000;
如果我这样做,我会得到一个错误,因为对于一个整数来说,这个数字显然太大了。为什么我必须在末尾添加L,编译器才能识别它是一个长变量?尽管我显然说过我需要k是long的类型 因为如果未附加
l
或l
,文字值将始终被解释为int
如果未指定l
,则将向long
类型的变量分配一个literalint
在编译时,编译器首先检查文本值,如果未附加l
或l
,则将其解释为int
现在,如果该数字大于Integer.MAX\u VALUE,编译器将显示一个错误 因为添加L会告诉编译器“嘿,顺便说一句,这是一个长类型…”那么为什么要在开头添加长呢?@Geddi如果你有一个“显然”不太长的数字,不能放入
int
,比如0
,你会如何指定它是一个长文本?那么,为什么有两种方法来指定一个长文本,而你只能有一个呢?这样,如果你使用它,编译器就会知道它是长的long
开始时是指定变量的类型(而不是指定值的类型)。但是我显然声明我的变量为long,因为我的数字可以扩展int的范围。编译器为什么不自动地转换到长时间呢?把它看作是两个步骤的过程。编译器首先检查文本,然后将文本赋值应用于引用。当检查文本值时,将发生编译错误(未附加L
/L
)。确定,谢谢。这有背景知识吗?“我觉得这不是最实用的方法,对吧?”格迪不太明白。在使用文字并指定给long
或long
引用类型时,如果文字不能指定给int
,则附加l
是声明long
的方法。如果值在int
范围内,那么您可以让转换完成它的工作,而不必担心l
。我想说的是,long大于integer和下面的其他类型。所以当我声明一个long类型的变量时,所有不扩展64位的数字都可以放入其中。那个么,既然文字的类型无论如何都适合,为什么还要麻烦呢。对不起,如果这听起来不合理,我显然是个初学者。只是好奇。