Java 运行时环境是否可以自由使用原始数据类型所需的任何大小?

Is java run-time environment free to use whatever size it wants for primitive data types?

提问人:Sanku 提问时间:7/13/2016 更新时间:4/16/2023 访问量:200

问:

我正在阅读《Java-The Complete Reference》一书,我看到了一句话,上面写着

“不应将整数类型的宽度视为它消耗的存储量,而应将其视为它为该类型的变量和表达式定义的行为。java 运行时环境可以自由使用任何它想要的大小,只要类型的行为符合你声明的格式”。

这是否意味着 java 可以自由选择整数数据类型的大小,通常为 4 个字节?

爪哇岛

评论

0赞 Prabhat 7/13/2016
Java 定义了四种整数类型,即 long 、int、short、byte。因此,不要与整数类型和 int 混淆。在 java 中,int 为 32 位。
0赞 Sanku 7/13/2016
是的,我知道这一点,但我无法理解这句话的实际含义。你能解释一下吗?
0赞 Sanku 7/13/2016
@AsteriskNinja 所以你是说当我们从 int 到 long 进行类型转换时,java 决定使用 64 位的 long width?
0赞 user207421 7/13/2016
@SaiSankalp 这就是规范所要求的。JVM 总是可以自由地使用更广泛的类型,但这样做会很浪费。
0赞 Sanku 7/13/2016
@EJP是的,我明白了,谢谢

答:

8赞 Arjan 7/13/2016 #1

“不应将整数类型的宽度视为数量 它消耗的存储,

JVM 可以在 32 位实现上以 32 位存储 Java 16 位,以提高性能...short

而是作为它为变量和表达式定义的行为 那种类型。

...但它的行为类似于 16 位有符号 2 的补码整数,无论它如何存储在内存中。

Java 运行时环境可以自由使用任何大小 它想要,只要类型的行为符合你声明的那样”。

如果一个程序需要在任何 JVM 上运行,那么所有 JVM 都需要以相同的方式处理该程序及其整数。但是,对于Java开发人员来说,如何实现JVM并不重要,因为Java 开发人员可以进行特定于体系结构的优化。

评论

1赞 Basil Bourque 7/13/2016
Arjan 的解释说得非常好,也很正确。我只想补充一点,这是 Java 语言和 JVM 所有规范背后的基本思想:定义所需的行为,但将实现细节留给实现者。这些年来,Java 已经有许多实现,它们的行为都相同,但在“幕后”方面却有很大的不同。