是否可以基于字节索引 Java 数组?
即类似的东西
array[byte b] = x;
我有一个性能非常关键的应用程序,它从文件中读取 b(在上面的代码中),我不希望将其转换为 int 的开销。实现这一目标的最佳方法是什么?使用这种索引方法而不是 int 是否会导致性能下降?
非常感谢,
弗罗斯科伊。
“将其转换为 int”没有任何开销。在 Java 字节码级别,所有byte
s 都已经int
是 s。
无论如何,进行数组索引将自动向上转换为int
无论如何。这些都不会提高性能,而且许多会降低性能。只需使用int
.
请注意,表 2.2 中的大多数指令没有整数类型 byte、char 和 short 的形式。没有布尔类型的形式。编译器使用 Java 虚拟机指令对 byte 和 short 类型的文字值的负载进行编码,这些指令在编译时或运行时将这些值符号扩展为 int 类型的值。boolean 和 char 类型的文字值的加载使用在编译时或运行时将文字零扩展为 int 类型的值的指令进行编码。同样,从 boolean、byte、short 和 char 类型的值数组加载是使用 Java 虚拟机指令编码的,这些指令将值符号扩展或零扩展为 int 类型的值。因此,对实际类型 boolean、byte、char 和 short 的值的大多数操作都可以由对计算类型 int 的值进行操作的指令正确执行。
由于 java 中的所有整数类型都已签名,因此您必须屏蔽掉 b 值的 8 位,前提是您确实希望从文件中读取大于 0x7F 的值:
byte b;
byte a[256];
a [b & 0xFF] = x;
不; 数组索引是非负整数 (JLS 10.4),但字节索引将被提升。