java int大小是固定的还是可变的?

java int大小是固定的还是可变的?,java,Java,java中的整数大小是固定长度还是可变大小 ex:1或10000在分配过程中两个数字占用相同的空间吗?根据JLS,Java整数是32位(4个八位字节) 整数类型有字节、短、整数、和长,其值分别为8位、16位、32位和64位带符号的二补整数 来源:它的大小是固定的。从程序员和机器的角度来看,Java中的所有int都是32位的 描述JVM字节码格式的提到每个int是32位。(旁白:boolean值和对象一样可以占用任意数量的位。)一个int或整数的大小是固定的。BigInteger的大小是可变的。下

java中的整数大小是固定长度还是可变大小

ex:1或10000在分配过程中两个数字占用相同的空间吗?

根据JLS,Java整数是32位(4个八位字节)

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


来源:

它的大小是固定的。从程序员和机器的角度来看,Java中的所有int都是32位的


描述JVM字节码格式的提到每个
int
是32位。(旁白:
boolean
值和对象一样可以占用任意数量的位。)

一个
int
整数的大小是固定的。
BigInteger
的大小是可变的。

下面是示例


这里值得注意的是,
布尔值的大小没有明确定义,但通常是8位。

这取决于JVM实现

在典型的实现中,boolean、byte、char、short和int在堆栈上始终为32位,而long在堆栈上为64位。在典型的实现中,字节、字符、短字符、整数和长字符将是它们在数组中的“本机”大小(即分别为8、16、16、32和64位)

在典型的实现中,如果对齐允许,结构中整数的大小将是其本机大小


当然,一些非常不寻常的实现可能会在结构中使用可变长度整数,甚至在堆栈或数组中使用可变长度整数(但这更难想象,也更难理解)-但我肯定没有看到任何这样的实现。

顺便说一句,如果您需要知道每个基本类型使用的位数,在运行时,它在
SIZE
字段中的等效包装类中可用,例如
Integer.SIZE
为32。这个数字对于所有类型都是固定的,并且与32位和64位版本的JVM相同。JLS定义了范围,这意味着(至少)必须使用32位存储(假设大小固定),但它没有定义INT在内存中的外观。一些(模糊的)平台可能会选择使用64位来表示它们(比如说,64位平台无法快速访问单词的高低部分),甚至可能使用可变大小。理论上,这个问题的答案可能是1和10000在堆上占据不同的空间。@BeeOnRope:你错过了这一部分吗?“整数类型是
字节
整数
,和
,其值分别为8位、16位、32位和64位带符号的两位补码整数”,这是为了定义它们在环绕(溢出)、移位、位求反等方面的行为,但它并不约束实现的内部表示。或者您是在建议一个没有本机2-s补码整数,或者没有字节可访问内存的实现,等等,无法通过应用适当的逻辑来实现兼容的JVM,使其看起来好像这些数字按照设计的方式运行?这相当于一个实现选择在内部将一些字符串存储为byte[]而不是char[],即使它们必须使其显示为后者。还要注意的是,在表示形式被限制的地方(例如堆栈布局),字节、short和int实际上大小相同-参见示例:。当然,您真正关心的是大多数类型的堆存储,这里JVM是不受限的,请参阅:当然,但字节码格式并不决定堆布局,这完全取决于JVM。我把关于分配的问题理解为堆上的空间。