a += b 真实含义是 a = (a的原始类型)(a + b),涉及自动类型转换;byte/short/char 复合赋值合法而普通赋值需显式强转;string += 优先算术后拼接;包装类 += 触发拆箱-计算-装箱,null时抛npe。

理解 a += b 的真实含义
它不是简单等价于 a = a + b,而是 a = (a的原始类型) (a + b) —— 编译器会自动插入强制类型转换。这点在类型不匹配时尤为关键。
整数类型窄化赋值要当心
比如 byte、short、char 参与复合赋值时,容易因隐式类型提升出错:
Java开发手册规约集合,基于阿里巴巴Java开发手册(嵩山版)。 涵盖7大维度:编程规约、异常日志、单元测试、安全规约、MySQL数据库、工程结构、设计规约。 当用户需要:(1) 编写或审查Java代码 (2) 检查命名/代码规范 (3) 处理异常和日志 (4) 编写单元测试 (5) 安全编码 (6) 数据库设...
-
byte b = 10; b += 5; ✅ 合法 —— 编译器自动处理为
b = (byte)(b + 5) -
byte b = 10; b = b + 5; ❌ 编译失败 ——
b + 5是 int 类型,不能直接赋给 byte - char c = 'A'; c += 1; ✅ 得到 'B';但 c = c + 1 会报错,原因同上
字符串拼接场景别误用
+= 对 String 是拼接操作,但要注意结合顺序和类型推断:
-
String s = "a"; s += 1 + 2; → 结果是
"a3"(先算 1+2=3,再拼接) -
String s = "a"; s += 1; s += 2; → 结果是
"a12" - 若本意是数值相加,却写了
s += 1 + "2",就会变成"a12"而非"a3",需加括号明确意图
自定义对象或包装类慎用
Integer、Long 等包装类支持 +=,但背后是自动拆箱→计算→装箱过程:
- Integer i = 100; i += 200; ✅ 行得通,但每次 += 都新建对象
- 频繁修改时性能不如基本类型;更严重的是,如果 i 为 null,运行时抛 NullPointerException
- 不要对 final 修饰的包装类变量使用 +=(编译报错:无法为 final 变量赋值)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










