我必须使用字节变量
byte a = 3;
byte b = 4;
如果我求它们,则sum的值是整数。
byte z = a+b //error, left side is byte, right side is integer
为什么a + b是int?
答案 0 :(得分:9)
因为Java Language Specification是这样说的
对操作数执行二进制数字提升(第5.6.2节)。
请注意,二进制数字促销会执行值集转换 (§5.1.13)并且可以执行拆箱转换(§5.1.8)。
数字操作数上的加法表达式的类型是提升的 其操作数的类型。
扩展基元转换(第5.1.2节)用于转换或 两个操作数由以下规则指定:
- [...]
- 否则,两个操作数都将转换为
int
类型。
因此,byte
值会提升为int
个值并相加。表达式的结果是提升类型,因此是int
。
您可以简单地投射结果
byte z = (byte) (b + a);
但要注意溢出/下溢。