真正管用的是“分组理解 + 关键陷阱加固 + 括号兜底”:按语义分组(算术>比较>逻辑),盯牢==与=、&&/||低优先级、!作用范围、赋值与三元最低等4个陷阱,复杂表达式一律显式加括号。

别靠死记硬背优先级表——真正管用的是“分组理解 + 关键陷阱加固 + 括号兜底”。Java 运算符优先级不是密码,而是语法逻辑的自然体现。你不需要记住 15 级顺序,只要盯住几组语义关系和几个高频翻车点,写代码时基本不会出错。
按语义分组,读起来就顺
算术运算(+ - * / %)天然比比较(> ==)紧,比较又比逻辑(&& ||)紧。这和日常表达一致:a + b > c && d == 0 就是“先算加减、再比大小、最后连逻辑”,不用查表也能读通。
移位(<< >>)夹在算术和关系之间;位运算(& ^ |)落在关系之后、逻辑之前——这个位置容易误判,但只要记住“位运算是底层操作,比逻辑更‘原始’”,就容易定位。
必须盯牢的 4 个危险组合
-
== 和 = 完全不是一家人:
a = b == c等价于a = (b == c),不是(a = b) == c。赋值永远最慢,等于却快得多。 -
&& / || 优先级其实很低:它们比
==、&、^都低。写flags & READ == READ会崩,因为实际是flags & (READ == READ)。 -
! 优先级很高,但只管紧邻操作数:
!a == b是(!a) == b,不是!(a == b)。想取反整个比较,必须加括号。 -
赋值与三元运算符优先级最低:像
a = b ? c : d + e实际是a = (b ? c : (d + e)),但没人一眼能看穿——直接加括号更安全。
用括号代替记忆
复杂表达式一律显式加括号,不依赖默认优先级:
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
立即学习“Java免费学习笔记(深入)”;
- 把
age > 18 && score > 60 || hasRecommendation改成(age > 18 && score > 60) || hasRecommendation - 把
obj != null && obj.getValue() > 0保持原样没问题(短路+语义清晰),但涉及位运算或混合类型时,如flags & MASK != 0,应写成(flags & MASK) != 0 - 字符串拼接中
1 + 2 + "abc"→"3abc",而1 + "abc" + 2→"1abc2";想确保数值计算优先,就用(1 + 2) + "abc"
结合 IDE 和团队规范
现代 IDE(如 IntelliJ)会在高亮或检查中提示“建议加括号以提高可读性”;启用相关 inspection 可主动拦截潜在歧义。
团队内部统一编码规范,比如规定:所有二元逻辑表达式、含位运算的条件、涉及 + 混合类型的表达式,必须加括号。这不是啰嗦,是降低协作成本的最小代价。

















