Java 后端面试题库 / 全部题解免费阅读理解原理,有条理地回答

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 题。

这道题,你掌握得怎么样?

掌握程度由你主动标记,阅读和收藏不会自动改变状态。