为什么字节总和是整数?

use*_*979 5 java byte integer type-conversion type-mismatch

我有tyo字节变量

byte a = 3;
byte b = 4;
Run Code Online (Sandbox Code Playgroud)

如果我求和它们,sum的值是整数.

byte z = a+b  //error, left side is byte, right side is integer
Run Code Online (Sandbox Code Playgroud)

为什么a + b是int?

Sot*_*lis 9

因为Java语言规范是这样说的

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

请注意,二进制数字提升执行值集转换(第5.1.13节),并可执行拆箱转换(第5.1.8节).

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

而且,关于数字推广,

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

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

因此,byte值被提升为int值并累加.表达式的结果是提升类型,因此是int.

您可以简单地转换结果

byte z = (byte) (b + a);
Run Code Online (Sandbox Code Playgroud)

但要小心溢出/下溢.