这通常是不正确的。事实上,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 上是否按预期工作?
是的,他们有。