byte加byte居然是int了?-问题原理

时间:2024-11-07 21:00:38

首先根据 Java 语言规范的描述,在执行加法或者减法运算时,会对操作数进行类型提升

image (2)

在进行类型提升的时候,byte、short、char 类型都会提升为int类型,由于两个数都提升为了 int 类型,它们执行的运算结果自然而然也就是 int 类型的了。

image (3)

在 JVM 的操作数栈的一个单位长度是 32 位,因此为了把参与运算的数放到操作数栈中就必须对其进行扩展,同时我理解这里也是为了和局部变量表的单位相匹配,局部变量表的基本单位是槽位,一个槽位的宽度也是 32 位。

image (4)

image (5)

从字节码指令也可以说明这点,JVM 中基本上没有关于 byte 类型运算的字节码指令:
image (6)

test