java运算符优先级决定执行顺序,高优先级先算,同级按结合性(多为左结合,赋值和三元为右结合);核心分组包括括号、一元、算术、关系、逻辑、三元、赋值,建议用括号提升可读性。

Java 中运算符优先级决定了表达式中各操作符的执行顺序。优先级高的运算符先计算,相同优先级则按结合性(通常是左到右)进行。
常见运算符优先级从高到低(关键几组)
理解优先级不需要死记全部 15 级,掌握以下核心分组即可应对绝大多数场景:
- 括号 ()、方法调用、数组访问 []、成员访问 . —— 最高,强制改变默认顺序
-
一元运算符:++、--、!、~、+(正)、-(负),如
!flag、-x -
算术运算符(含位运算):先乘除取余
*/%,再加减+-,然后是位移<code>>>>>>,最后是位与&、异或^、位或| -
关系与相等运算符:
<code> <code>>>===!=(注意=是赋值,==才是比较) -
逻辑运算符:短路与
&&优先级高于 短路或||(例如a && b || c等价于(a && b) || c) -
条件运算符(三元):
? :—— 优先级较低,但高于赋值,如x = a > b ? 1 : 0;不需要额外括号 -
赋值运算符:
=+=-=等 —— 优先级最低,且右结合(a = b = 5等价于a = (b = 5))
结合性影响同级运算的顺序
当多个同优先级运算符连续出现时,结合性决定计算方向:
- 大多数二元运算符(如
+、*、&&、==)是左结合:a - b - c→(a - b) - c - 赋值类(
=、+=)和三元运算符(? :)是右结合:a = b = 3→a = (b = 3);a ? b : c ? d : e→a ? b : (c ? d : e)
实用建议:别依赖记忆,用括号提升可读性
即使知道 && 比 || 优先,写成 isReady && hasData || forceRun 仍容易歧义。更清晰的写法是:
- 明确意图:
(isReady && hasData) || forceRun或isReady && (hasData || forceRun) - 复杂表达式拆解为临时变量,例如:
boolean canProcess = isReady && hasData; if (canProcess || forceRun) { ... } - IDE(如 IntelliJ)通常会用颜色/下划线提示潜在优先级陷阱,留意警告
一个小验证示例
看看这个表达式怎么算:
int result = 3 + 4 * 2 > 10 ? 100 : 200;步骤分解:
- 先算
4 * 2(乘法优先级高于加法)→8 - 再算
3 + 8→11 - 接着
11 > 10→true - 最后三元运算 →
100
所以 result == 100。如果想让加法先比大小,就得加括号:(3 + 4) * 2 > 10。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











