Java 如果一个长变量中存储了int值,它需要多少字节?
我在长变量ut中存储一个整数值,如果我给出的值大于int range,则表示“int类型的文本大于range” 整数的范围是2147483648到2147483647 所以当我储存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、 长变
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代码>该转换在执行时执行。