【发布时间】: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
为什么 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
这是因为b=b+8 不完全等同于b+=8。
根据语言规范,第 15.26.2 节:
E1 op= E2形式的复合赋值表达式等价于E1 = (T) ((E1) op (E2)),其中T是E1的类型,但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。
【讨论】: