Java运算符优先级重在分组理解、口诀锚定和括号兜底;口诀“单目乘除位关系,逻辑三目后赋值”与“非、算、关、与或、赋”助记大顺序,按行为场景分类更自然,日常应主动加括号防错。

Java 运算符优先级不用死记硬背,关键在分组理解 + 口诀锚定 + 括号兜底。真正写代码时,没人靠默背表格来断句,而是靠逻辑直觉和防御性加括号。下面说几个实用、好上手的方法:
用口诀锁定大顺序
最广为流传、也最顺口的口诀是:
“单目乘除位关系,逻辑三目后赋值”
逐段拆解含义:
-
单目:
!~++--+-(正负号)等一元运算符,优先级最高之一 -
乘除:
*/%,紧随其后,符合数学直觉 -
位:
>>>>>移位运算,比加减高,但常被忽略 -
关系:
>>=instanceof,用于比较大小或类型,还没到真假判断 -
逻辑:这里指
&&||(短路逻辑),注意它比&|^(按位逻辑)优先级低,这点极易混淆 -
三目:
? :,优先级很低,比赋值还低,所以a = b > 0 ? 1 : 0实际等价于a = (b > 0 ? 1 : 0),不加括号也安全;但b > 0 ? 1 : 0 == c就必须写成b > 0 ? 1 : (0 == c)才对 -
后赋值:“后”字无实义,就提醒你:所有
=+=-=等都是最低优先级之一,且右结合(a = b = 1等价于a = (b = 1))
另一个更精炼口诀:“非、算、关、与或、赋”
- 非:
!~ - 算:
* / % + - >(把算术和移位归为“计算类”) - 关:
>= instanceof - 与或:
== != & ^ | && ||(注意& | ^在==之后、&& ||之前) - 赋:
= += -= ...
按“行为场景”分类记忆更自然
别记编号,记它在哪种表达式里出现、谁会先抢着算:
- 写数组或方法调用时:
() [] .总是第一眼执行,比如list.get(i + 1).size(),先算i + 1(加法),再.get(),最后.size() - 判断条件时:
==和&&容易打架,记住==比&&优先级高 →if (x & y == 0)实际是x & (y == 0),报错!必须写(x & y) == 0 - 字符串拼接时:
+是“两面派”,一边有字符串就变连接符,且它的优先级和加减法同级,所以"a" + 3 * 2是"a" + 6→"a6",不是"a32" - 赋值嵌套时:
int a = b = 5;合法,因为=右结合;但a == b = 5是错的(==优先级高于=,变成a == (b = 5)?不,实际是(a == b) = 5—— 左边不是变量,编译失败)
日常开发中真正有效的习惯
-
只要涉及
&|^和==!=>混用,一律加括号 -
三目运算符周围加括号更清晰:
result = (score >= 90) ? "A" : (score >= 80) ? "B" : "C" -
复杂条件拆成变量:
boolean isAdult = age >= 18; boolean hasLicense = license != null; if (isAdult && hasLicense) { ... }比
if (age >= 18 && license != null)更易读,也绕开了优先级争议
不复杂但容易忽略:优先级决定的是语法分组,不是求值顺序。Java 表达式永远从左到右求值(除非运算符本身规定,如 && 短路),但括号决定了哪部分先被当作一个整体。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











