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
类型的变量分配一个literal
int

在编译时,编译器首先检查文本值,如果未附加
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位的数字都可以放入其中。那个么,既然文字的类型无论如何都适合,为什么还要麻烦呢。对不起,如果这听起来不合理,我显然是个初学者。只是好奇。