【问题标题】:Why is the sum of bytes integer? [duplicate]为什么字节的总和是整数? [复制]
【发布时间】:2014-03-20 15:28:26
【问题描述】:

我有 tyo 字节变量

byte a = 3;
byte b = 4;

如果我把它们相加,sum的值是整数。

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

为什么 a+b 是 int?

【问题讨论】:

  • byte 没有 + 运算符。 byte 在被+ 处理之前被提升为int
  • 我希望字节的总和是字节。
  • @user2693979 你的期望和语言规范不同 ;)

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


【解决方案1】:

因为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);

但要小心溢出/下溢。

【讨论】:

    猜你喜欢
    • 2020-02-25
    • 2020-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-28
    • 1970-01-01
    • 2021-03-09
    • 2012-11-04
    相关资源
    最近更新 更多