Java 如果一个长变量中存储了int值,它需要多少字节?

Java 如果一个长变量中存储了int值,它需要多少字节?,java,Java,我在长变量ut中存储一个整数值,如果我给出的值大于int range,则表示“int类型的文本大于range” 整数的范围是2147483648到2147483647 所以当我储存 long l=2147483647; long l=2147483648; 那么它运行良好 但当我储存 long l=2147483647; long l=2147483648; 然后它给出编译时错误,因为“int类型的文本大于范围” 所以我想知道,如果我正在存储long l=2147483647 i、 长变

我在长变量ut中存储一个整数值,如果我给出的值大于int range,则表示“int类型的文本大于range”

整数的范围是2147483648到2147483647

所以当我储存

long l=2147483647;
long l=2147483648;
那么它运行良好

但当我储存

long l=2147483647;
long l=2147483648;
然后它给出编译时错误,因为“int类型的文本大于范围”

所以我想知道,如果我正在存储
long l=2147483647
i、 长变量的int range值,然后使用32位或64位来存储它


另外,如果它使用64位,那么为什么它给出
长l=2147483648的错误

您似乎认为当
long
存储的值在
int
范围内时,它将使用32位来存储它。事实并非如此

Java语言规范第4.2节基本类型和值

整数类型有
字节
整数
、和
,其值分别为8位、16位、32位和64位带符号的二补整数

出现编译器错误,因为整数文本
2147483648
不能在该上下文中使用。该错误与
long
的大小无关

第3.10节

从0到2147483647的所有十进制文字都可能出现在int的任何位置 文字可能会出现。十进制文字2147483648只能显示为 一元减运算符
-
(§15.15.4)的操作数

如果出现十进制文字2147483648,则为编译时错误 除一元减运算符的操作数以外的任何位置;或者如果 int类型的十进制文字大于2147483648


您可能需要2147483648L。先生,我知道使用L可以工作,但我想知道,如果我不使用L,那么如果我存储integervalue的时间比java如何处理它长。它是否将其视为整数变量并分配32位存储或64位存储因此java不会将整数文本转换为长文本,即使我们将其存储在长变量中。基本类型接受相同的数量,无论您在其中存储什么。错误消息与此无关。因此,文字与文字类型定义的内容相同,变量与变量类型定义的内容相同。@CarlosHeuberger:否,对于分配给
long
变量的
int
文字,转换在编译时执行。在你的例子中,
inti=123;长l=i该转换在执行时执行。