谁决定Java中的int等数据类型的大小? JVM或OS或处理器?
int size是4个字节。无论是OS还是处理器,它总是4个字节吗?
答案 0 :(得分:15)
Java Language Specification决定他们。它们在所有虚拟机,所有操作系统和所有处理器上的大小相同。如果他们不是,那就不再是Java了。
答案 1 :(得分:2)
JVM规范驱动JVM实现来决定数据类型的大小。请参阅http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-2.html#jvms-2.3
答案 2 :(得分:1)
虽然Java规范决定了每种类型实际使用了多少位,但默认的32位JVM实际上会在内存中填充某些类型,使用32位空间来存储值,甚至是那些不需要那么多空间的空间。他们仍然表现得很好(关于程序),好像他们占用了真正的存储量,但是使用的空间量仍然要大得多。
其他JVM可以这样做,例如,它们可以存储boolean
的数组,每个值只有一位,而不是每个值32位。
因此虽然int
的大小总是显示为32位,因为它总是会以32位回绕并且只能保存32位值,但JVM确实可以选择使用内部存储它64位空间或其他数字,具体取决于硬件和实现。
此外,浮点值在这方面实际上受到的限制要少得多 - 而float
和double
的规范确实要求它们使用特定格式,两个不同库的存在{{ 1}}和java.lang.Math
(请参阅What's the difference between java.lang.Math and java.lang.StrictMath?获得解释)是一个明显的例子。使用java.lang.StrictMath
不要求以任何特定方式存储这些函数的中间计算,或者使用特定数量的位来计算所有内容。