尽管算术运算符被定义为可以对任何数字类型进行运算,但是根据Java语言规范(5.6.2 Binary Numeric
Promotion),字节和short类型的操作数在传递给运算符之前会自动提升为int。
要对byte或short类型的变量执行算术运算,必须将表达式用括号括起来(在其中将以int类型进行运算),然后将结果转换回所需的类型。
字节a = 23;字节b = 34;字节c =(字节)(a + b);
这是真正的Java专家的一个后续问题:为什么?byte和short类型是完美的数字类型。为什么Java不允许对这些类型进行直接算术运算?(答案不是“精度下降”,因为没有明显的理由首先将其转换为int。)
更新:jrudolph建议此行为基于JVM中可用的操作,尤其是仅实现全字和双字运算符。因此,对于字节和短裤运算符,必须将它们转换为int。



