Java中+运算符遇字符串即触发拼接,左结合且从左到右扫描,其余操作数调用String.valueOf()转为字符串;括号可强制先执行数值运算。

Java 中 + 运算符在字符串与基本类型混合时,**只要有一个操作数是字符串,整个表达式就按字符串拼接处理,其余操作数会自动调用 String.valueOf() 转为字符串**,而不是先做数学运算。
从左到右的“就近绑定”规则
Java 的 + 是左结合运算符,且编译器按从左到右顺序扫描,一旦遇到字符串,后续所有 + 都视为字符串拼接,不再进行数值计算。
-
"a" + 1 + 2 → 先
"a" + 1得"a1",再"a1" + 2得"a12" -
1 + 2 + "a" → 先
1 + 2(都是 int)得3,再3 + "a"得"3a" -
1 + "a" + 2 + 3 →
"1a" + 2 + 3→"1a2" + 3→"1a23"
基本类型转字符串的隐式调用机制
非字符串操作数(如 int、double、boolean、null)在拼接时,实际等价于调用 String.valueOf(...):
-
String.valueOf(123)→"123" -
String.valueOf(3.14)→"3.14" -
String.valueOf(true)→"true" -
String.valueOf(null)→"null"(注意不是空指针异常)
括号可强制改变计算顺序
用括号能明确数值运算优先级,避免意外拼接:
-
"Result: " + (10 + 5) →
"Result: 15"(先算括号内加法) -
"Result: " + 10 + 5 →
"Result: 105"(无括号,纯拼接) -
"" + (a + b) * c → 先算算术,再转字符串;而 "" + a + b * c 则变成
""+a拼接后,再拼b*c的字符串结果
常见陷阱与建议
容易出错的地方集中在“本想算数却拼了串”,尤其在日志、提示信息中:
- ❌
System.out.println("Sum: " + a + b);→ 若a=1, b=2,输出"Sum: 12",不是"Sum: 3" - ✅ 应写成
System.out.println("Sum: " + (a + b)); - ⚠️ 注意
null:即使对象为null,str + obj不会 NPE,而是拼出"null" - ? 复杂表达式建议显式转换或拆分,提升可读性与可控性
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











