我对下面的代码有疑问。代码取自我的编程语言书。
byte x, y, z;
...
/* The values of y and z are coerced into int and int addition is performed */
/* The sum is converted into byte */
x = y + z;
我的问题是为什么 Java 会进行这样的强制。你有什么想法?
提前致谢。
为了保持 JVM 指令集简单,它没有为每个整数类型实现加法运算符。具体来说,它不能添加字节。(请参阅JVM 操作列表)这使得 JVM 更简单,并且可能更便携。
这反映了 java 字节码、jvm、java 虚拟机,在规范中使用 int 将单个字节变量存储在堆栈上。它iadd
用于添加两个字节。请参阅jvm 指令集。
有人可能会争辩说这有点过度规范:提到参考实现的实现选择。
在 JVM 中,每个堆栈元素的大小为 32 位。实际的添加是这样的:
int
)iadd
指令,从堆栈中弹出两个值并将它们相加这就是为什么您必须再次将结果值(类型int
)转换为 a 的原因byte
。