7

Java中的int等数据类型的大小由谁决定?JVM或操作系统或处理器?

int 大小为 4 个字节。无论操作系统或处理器如何,它是否总是 4 个字节?

4

3 回答 3

15

Java 语言规范决定了它们。它们在所有虚拟机、所有操作系统和所有处理器上都具有相同的大小。如果不是,它就不再是 Java。

于 2012-05-26T08:26:41.440 回答
2

驱动 JVM 实现来决定数据类型大小的是 JVM 规范。参考http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-2.html#jvms-2.3

于 2012-05-26T08:27:32.000 回答
1

虽然 Java 规范决定了每种类型实际使用多少位,但默认的 32 位 JVM 实际上会在内存中填充一些类型,使用 32 位空间来存储值,即使是不需要那么多空间的值。它们的行为仍然(关于程序),好像它们占用了它们的实际存储量,但使用的空间量仍然大得多。

其他 JVM 可以以不同的方式执行此操作,例如,它们可以存储一个booleans 数组,每个值只有一位,而不是每个值 32 位。

因此,虽然 an 的大小int总是看起来是 32 位,因为它总是以 32 位环绕并且只能保存 32 位值,但 JVM 确实可以选择使用 64 位空间或其他一些空间在内部存储它数量取决于硬件和实现。

此外,浮点值在这方面实际上受到的限制要少得多——而规范float确实double要求它们使用特定格式、两个不同库的存在java.lang.Math以及java.lang.StrictMath(请参阅java.lang.Math 和 java.lang.Math 之间的区别是什么)。 lang.StrictMath?进行解释)是一个明显的例子。使用java.lang.Math不需要以任何特定方式存储这些函数的中间计算,或者它使用特定数量的位来计算所有内容。

于 2013-05-20T13:21:11.870 回答