如果将int值存储在其中,则长变量占用多少字节?

时间:2018-12-23 07:17:31

标签: java

如果我给出的值大于int range,则我将整数存储在long变量中,这就是说“ int类型的字面量大于range”。

整数的范围是2147483648至2147483647

所以当我存储

long l=2147483647;

然后运行正常

但是当我存储

long l=2147483648;

然后给出编译时间错误,因为“ int类型的字面量大于范围”

所以我想知道如果我要存储long l=2147483647; 即int range的值在long变量中,然后它使用32位还是64位存储它。

如果它使用64位,那么为什么给long l=2147483648;提供错误

1 个答案:

答案 0 :(得分:1)

您似乎认为,当long存储一个在int范围内的值时,它将使用32位存储它。这不是真的。

Java语言规范第4.2节原始类型和值

  

整数类型为byteshortintlong,其值分别为8位,16位,32位和 64位带符号的二进制补码整数。

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

第3.10节

  

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

     

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