这通常是不正确的。事实上,JVM 规范 §2.3对此进行了概述:
Java 虚拟机支持的原始数据类型是数字类型、boolean
类型(§2.3.4)和returnAddress
类型(§2.3.3)。
数字类型由整数类型(§2.3.1)和浮点类型(§2.3.2 )组成。
整数类型有:
byte
,其值为 8 位有符号二进制补码整数,默认值为 0
short
,其值为 16 位有符号二进制补码整数,默认值为 0
int
,其值为 32 位有符号二进制补码整数,默认值为 0
long
,其值为 64 位有符号二进制补码整数,默认值为 0
char
,其值为 16 位无符号整数,表示基本多语言平面中的 Unicode 代码点,使用 UTF-16 编码,其默认值为空代码点 ( '\u0000'
)
现在,boolean
这是一个稍微不同的故事。从§2.3.4 开始:
尽管 Java 虚拟机定义了一个boolean
类型,但它只提供了非常有限的支持。没有专门用于对boolean
值进行操作的 Java 虚拟机指令。相反,Java 编程语言中对布尔值进行操作的表达式被编译为使用 Java 虚拟机int
数据类型的值。
您可以看到字节码的差异,具体取决于您使用的是 abyte[]
还是 an int[]
,因此它们并不相同:
byte[] b = {42};
ICONST_1
纽瓦雷 T_BYTE
DUP
ICONST_0
比普什 42
巴斯托
阿斯托尔 1
对比
int[] b = {42};
ICONST_1
纽瓦雷 T_INT
DUP
ICONST_0
比普什 42
商城
阿斯托尔 1
真的是节省空间吗?
是的,很可能是这样,尤其是在数组非常大的情况下。
按位运算在 Ints 上是否按预期工作?
是的,他们有。