问题:\n
char x = 'a'; x += 3; // 正常运行 x = x + 3; // 编译时错误
因为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可以是恒等转换或缩小的原始类型转换。
用户名或电子邮箱地址
密码