Java 为什么字节之和是整数?

Java 为什么字节之和是整数?,java,type-conversion,integer,byte,type-mismatch,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?因为 对操作数执行二进制数字提升(§5.6.2) 请注意,二进制数字提升执行值集转换 (§5.1.13)并可进行拆箱转换(§5.1.8) 数字操作数上的加法表达式的类型是提升的 其操作数的类型 以及 加宽原语转换(§5.1.2)用于转换或 由

我有一个字节变量

byte a = 3;
byte b = 4;
如果我对它们求和,sum的值就是整数

byte z = a+b  //error, left side is byte, right side is integer
为什么a+b是int?

因为

对操作数执行二进制数字提升(§5.6.2)

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

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

以及

加宽原语转换(§5.1.2)用于转换或 由以下规则指定的两个操作数:

  • [……]
  • 否则,两个操作数都将转换为类型
    int
因此,
byte
值被提升为
int
值并相加。表达式的结果是升级类型,因此是
int

您可以简单地投射结果

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

但是要小心溢出/下溢。

对于
字节
没有
+
运算符<代码>字节在被
+
处理之前被提升为
int
。我希望字节的总和是字节。@user2693979您的期望和语言规范不同;)