【问题标题】:incompatible types: possible lossy conversion from int to byte error? [duplicate]不兼容的类型:从 int 到字节错误的可能有损转换? [复制]
【发布时间】:2019-03-24 18:47:54
【问题描述】:

为什么 b=b+8 会在 b+=8 剂量时引发错误。

public static void main(String []args){
    byte b = 6;
    b=b+8;
    //b+=8;
    System.out.println(b);
    b+=7;
    System.out.println(b);
}

【问题讨论】:

标签: java


【解决方案1】:

这是因为b=b+8 不完全等同于b+=8

根据语言规范,第 15.26.2 节:

E1 op= E2 形式的复合赋值表达式等价于E1 = (T) ((E1) op (E2)),其中TE1 的类型,但E1 只计算一次。

它也给你一个例子:

例如下面的代码是正确的:

short x = 3;
x += 4.6;

并导致 x 的值为 7,因为它等同于:

short x = 3;
x = (short)(x + 4.6);

所以+= 不仅将总和分配给变量,而且还将总和转换为左侧变量的类型。 b=b+8 不会这样做。

那为什么b=b+8 会产生警告呢?

这是因为+ 运算符在用于byte 类型时也执行数字提升。表达式b+8 的类型实际上是int。因此,编译器会告诉您您正在将 int 转换为 byte

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-19
    • 1970-01-01
    • 1970-01-01
    • 2020-01-16
    • 2020-03-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多