Java运算符优先级决定“谁先算”,如优先于+,故3+42等于11;结合性解决同级运算顺序,如+-左结合、=右结合;实践中应多用括号避免歧义。

Java 中运算符优先级与结合性不是靠语法关键字体现的,而是通过表达式求值时的实际执行顺序自然呈现——写出来的代码看起来一样,但加不加括号、操作数类型怎么排,结果可能完全不同。
优先级决定“谁先算”
优先级高的运算符会先于同级或低级的运算符执行。比如 * / % 比 + - 优先级高,所以:
-
3 + 4 * 2等价于3 + (4 * 2),结果是 11,不是 14 -
a & b == c实际是a & (b == c),因为 == 优先级高于 &;若本意是(a & b) == c,必须加括号 - 位运算符 &、^、| 优先级低于比较运算符,常被误用,如
flag & MASK == 0会先算MASK == 0(布尔值),再跟flag做按位与——这几乎总是错的
结合性解决“同样优先级时怎么连”
当多个相同优先级的运算符连续出现,结合性决定计算方向:
你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在
-
+ - * / 等双目运算符都是左结合:
10 - 3 - 2→(10 - 3) - 2 = 5,不是10 - (3 - 2) = 9 -
= += -= 等赋值类运算符是右结合:
a = b = 5等价于a = (b = 5),先给b赋值,再把值传给a -
?: 是唯一常用右结合的三元运算符:
a ? b : c ? d : e解析为a ? b : (c ? d : e),不是(a ? b : c) ? d : e
字符串拼接 + 是典型“类型+顺序”双重依赖场景
+ 的行为完全由当前两个操作数的类型和从左到右的结合顺序共同决定:
立即学习“Java免费学习笔记(深入)”;
-
1 + 2 + "3"→(1 + 2) + "3"→3 + "3"→ "33" -
1 + "2" + 3→(1 + "2") + 3→"12" + 3→ "123" -
"1" + 2 + 3全程字符串拼接 → "123" - 一旦左边出现字符串,后续所有
+都按拼接处理;只要全是数值,就按算术加法并自动类型提升
最稳妥的实践方式就是主动用括号
别依赖记忆优先级表,尤其在混合算术、位运算、比较、逻辑时:
- 写
(a & MASK) != 0,不写a & MASK != 0 - 写
"" + a + b明确触发拼接,比a + b + ""更易读(虽然结果一样) - 复杂条件中,
(x > 0 && y 比 <code>x > 0 && y 清晰且防错 - IDE 通常会给出警告(如 “可能不符合预期的运算符优先级”),看到就加括号

















