为什么字节总和是整数?

时间:2014-02-19 23:43:33

标签: java type-conversion integer byte type-mismatch

我必须使用字节变量

byte a = 3;
byte b = 4;

如果我求它们,则sum的值是整数。

byte z = a+b  //error, left side is byte, right side is integer

为什么a + b是int?

1 个答案:

答案 0 :(得分:9)

因为Java Language Specification是这样说的

  

对操作数执行二进制数字提升(第5.6.2节)。

     

请注意,二进制数字促销会执行值集转换   (§5.1.13)并且可以执行拆箱转换(§5.1.8)。

     

数字操作数上的加法表达式的类型是提升的   其操作数的类型。

regarding numeric promotion

  

扩展基元转换(第5.1.2节)用于转换或   两个操作数由以下规则指定:

     
      
  • [...]
  •   
  • 否则,两个操作数都将转换为int类型。
  •   

因此,byte值会提升为int个值并相加。表达式的结果是提升类型,因此是int

您可以简单地投射结果

byte z = (byte) (b + a);

但要注意溢出/下溢。