x=x+3和x+=3有什么区别?为什么一个需要类型转换而另一个不需要?

13 浏览
0 Comments

x=x+3和x+=3有什么区别?为什么一个需要类型转换而另一个不需要?

问题:\n

char x = 'a';
x += 3; // 正常运行
x = x + 3; // 编译时错误

0
0 Comments

因为x += 3等同于x = (char)(x+3),而x + 3默认为int操作,将int赋给char必须进行类型转换。根据JLS规范15.26.2,复合赋值表达式E1 op= E2等同于E1 = (T)((E1) op (E2)),其中T是E1的类型,除了E1只会被计算一次。需要注意的是,隐含的类型转换T可以是恒等转换或缩小的原始类型转换。

0