本文目录导读:

记住Java运算符优先级,其实不需要死记硬背整个表格。核心技巧是:记特例 + 用括号。
对于99%的日常开发场景,你只需要记住下面这张简化口诀表,其他遇到不确定的,一律加括号(),代码可读性更高,也不容易出错。
简化版口诀(只需记这 7 级)
你可以按从高到低的顺序记这个顺口溜(括弧里是运算符):
一自、二乘、三加、四移、五关、六等、七逻
展开解释:
- 一自(最高): (自增), (自减), (逻辑非)
- 二乘: (乘), (除), (取余)
- 三加: (加), (减)
- 四移:
<<(左移),>>(右移),>>>(无符号右移) - 五关:
<><=>=instanceof(关系比较) - 六等: (判断相等) 注意: 这比关系比较低一级,但比赋值高。
- 七逻(最低):
&&(逻辑与), (逻辑或)
特别说明:
- 赋值运算符 (, 等) 优先级最低,比逻辑或还低,
a = b && c永远先算b && c。 - 三目运算符 () 优先级只比赋值高一点,也很低。
90% 的人会搞错的 3 个特例(重点)
很多笔试题或者复杂表达式容易错,就错在这几个地方:
自增/自减与点号(.)的优先级
// 易错点: obj.x++ 是先取x还是先取obj?
// 规则: 点号(.) > 自增(++)
int[] arr = {1, 2};
int index = 0;
// 下面这句:先取 arr[0] = 1,index自增变成1
int value = arr[index++];
System.out.println(value); // 输出 1 (不是2)
System.out.println(index); // 输出 1 (自增生效)
记忆方法: 和 永远优先级最高(仅次于括号)。
移位与加减
// 易错点: 1 << 2 + 3 是等于 (1<<2)+3 还是 1<<(2+3)? // 规则: 加法(+) > 移位(<<) int a = 1 << 2 + 3; // 实际运算: 1 << (2+3) = 1 << 5 = 32 // 而不是:(1<<2) + 3 = 4+3=7
记忆方法: 四移是第4级,三加是第3级(更高),所以加、减先算。
比较与等于
// 易错点: 关系比较(< >) 高于 等于(== !=) int a = 5; int b = 6; boolean result = a > b == false; // 实际运算:先算 a > b = false,再算 false == false = true // 而不是: a > (b == false) 这种无意义比较 System.out.println(result); // true
记忆方法: “五关”排在“六等”前面。
真正实用的建议(而不是背诵)
比起记住整个表格,更重要的习惯是:
-
当你需要混合使用多个运算符时,能用括号就用括号。 这不是能力弱,而是代码清晰、避免坑。
a + (b << c)比a + b << c好一万倍。(a || b) && c比a || b && c好一万倍。
-
如果代码需要你思考 3 秒以上才能确定优先级说明可读性差。 拆分成多行或加括号。
-
不用记
&(按位与、或、异或)的优先级。 平时几乎不用,用时直接加括号。
终极记忆法(一句话总结)
单目 > 算术 > 移位 > 比较 > 等号 > 逻辑 > 赋值
或者更形象的:
“自己(自增)先算,然后算数,接着移位,再比大小,再看等于,最后逻辑判断,赋值收尾。”