a = a + b 与 a += b 有什么区别?
先说出你的答案
定义边界、关键机制、一个反例;P8题再补容量、失败与验证。
查看完整题解
参考回答
直接回答
二者不总是等价。复合赋值 a += b 会按复合赋值规则把运算结果转回左侧变量类型,而且左侧表达式只求值一次;a = a + b 不会自动获得同样的隐式窄化转换。对于简单的 int 加法变量,它们常表现一样,但不能推广到所有表达式。
讲清原理
byte、short、char 参加普通整数加法时,结果通常先提升为 int。再把 int 赋回 short,需要显式转换;复合赋值已经包含相应转换,因此能编译。这种便利也可能掩盖溢出或截断,并不代表结果一定符合业务预期。
当左侧是数组下标等带副作用的表达式时,还要注意求值次数。不能简单把每一种复合赋值机械展开成重复计算左侧的代码。
例子与易错点
short a = 1;
int b = 2;
a += b;
System.out.println(a); // 3
若把 a += b 换成 a = a + b,该例会编译失败,因为右侧是 int。加上 (short) 虽能编译,也不意味着发生溢出时会自动报错。
相关题:第 15 题、第 18 题。
和评分标准对照,你能独立回答到哪一步?
自评会安排下一次复习,不保存你的口述内容。
这道题,你掌握得怎么样?
掌握程度由你主动标记,阅读和收藏不会自动改变状态。