真正管用的方法是按“功能梯队”分五组记忆:第一梯队为()、.、[]、new;第二梯队为单目运算符;第三梯队为算术运算符;第四梯队为比较与逻辑运算符;第五梯队为三元和赋值运算符,并坚持混合运算必加括号。

直接记住全部14级优先级容易混淆,真正管用的方法是抓住三类关键分组 + 一条括号铁律。
按“功能梯队”分组记,别死背数字顺序
Java运算符天然按语义分层,分成五组更容易定位:
-
第一梯队(最高):取值动作——
()括号、.点号、[]下标、new,它们决定“操作谁”,永远最先执行 -
第二梯队:单目操作——
++/--(后置)、++/--(前置)、!、~、一元+/-、类型强转(int),这类只作用于一个操作数,紧随其后 -
第三梯队:算术核心——
*/%一家,+-一家,注意+在字符串拼接时也属这一层,但行为不同 -
第四梯队:比较与判断——先移位
<<>>,再关系<>>=,再相等==!=,最后才是逻辑&^|和短路&&|| -
第五梯队(最低):结果落袋——三元
? :和所有赋值类=+=等,它们不参与中间计算,只负责把最终值存进去
重点盯住几个易翻车的优先级陷阱
这些地方写错不报错,但结果完全不是你想要的:
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
-
a & b == c实际是a & (b == c),因为==比&优先级高——想做位掩码判断,必须写成(a & b) == c -
flag = a == b || c == d没问题,但flag = a == b | c == d就危险了,因为|比==低,会先算两个==再按位或 -
arr[i++] = value中,i++先取原值赋给arr[i],再自增,这是后置++的语义,不是优先级问题,但常被误以为是优先级导致
养成加括号的习惯,而不是赌优先级
只要表达式里出现两个以上不同类型运算符,就该加括号。这不是妥协,而是工程实践:
立即学习“Java免费学习笔记(深入)”;
- 比如
result = a + b << 2 | mask,哪怕你确认了优先级,别人读代码也要停顿三秒——改成result = ((a + b) << 2) | mask,一眼清晰 - 涉及
&|^和比较运算混用时,一律括起来,避免线上事故复盘时拍大腿 - 三元运算嵌套时,
a ? b : c ? d : e结合性是从右向左,但可读性极差,写成a ? b : (c ? d : e)更稳妥
用口诀快速定位,但别依赖它解题
口诀只是启动记忆的引子,不是解题依据:
- “括号单目乘除加,移位关系再相等,位与异或接着来,逻辑短路三目赋”——念一遍能唤起大致分层
- 遇到不确定,立刻查表或写个最小测试:
System.out.println(1 + 2 == 3 & 4 == 4);看输出是true还是false,比背表更快 - IDE(如IntelliJ)默认会用颜色/缩进提示运算边界,开启“highlight mismatched brackets”和“expression type hints”能减少手误

















