谁决定Java中的数据类型大小

时间:2012-05-26 08:24:36

标签: java

谁决定Java中的int等数据类型的大小? JVM或OS或处理器?

int size是4个字节。无论是OS还是处理器,它总是4个字节吗?

3 个答案:

答案 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位空间或其他数字,具体取决于硬件和实现。

此外,浮点值在这方面实际上受到的限制要少得多 - 而floatdouble的规范确实要求它们使用特定格式,两个不同库的存在{{ 1}}和java.lang.Math(请参阅What's the difference between java.lang.Math and java.lang.StrictMath?获得解释)是一个明显的例子。使用java.lang.StrictMath不要求以任何特定方式存储这些函数的中间计算,或者使用特定数量的位来计算所有内容。