当前位置: 首页 > 知识库问答 >
问题:

不兼容的类型:从int到字节的可能有损转换错误?[副本]

淳于嘉树
2023-03-14

为什么b=b+8抛出错误,其中b+=8为dosent。

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

共有1个答案

夏法
2023-03-14

这是因为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转换为字节

 类似资料: