Java运算符优先级决定执行顺序,高优先级先算,同级按结合性(多左结合、赋值与三元右结合);需警惕位运算与比较、字符串拼接与算术、逻辑运算混用时的隐含歧义,建议加括号明确意图。

Java中运算符优先级决定了表达式中各运算符的执行先后顺序,优先级高的先算,相同优先级则看结合性(多数左结合,少数右结合,如赋值、三元运算符)。
一、核心优先级分组(从高到低)
不必死记全部15级,按常用逻辑分组理解更高效:
- 括号与单目运算:()、[]、.、++/--(前置/后置)、+/-(正负号)、!、~ —— 最高,且括号可强制改变顺序
- 算术核心:* / % 优先于 + -(注意:+ 也用于字符串拼接,但类型不同不影响该层级关系)
- 移位运算:> >>> —— 比关系运算符高,但常被忽略,写时建议加括号明确意图
- 关系与相等: >= 优先于 == !=,而 == != 又高于位运算 & ^ |
- 逻辑短路:&& 优先于 || —— 这是关键!if (a & b == c || d) 实际等价于 if (a & (b == c) || d),不是 if ((a & b) == c || d)
- 三元与赋值:? : 是右结合,优先级低于逻辑运算;= += -= 等赋值运算符优先级最低,且右结合(a = b = 5 合法,等价于 a = (b = 5))
二、结合性决定同级运算方向
当多个同级运算符连续出现时,结合性决定计算方向:
- 左结合:a + b - c → (a + b) - c;a * b / c → (a * b) / c
- 右结合:a = b = c → a = (b = c);a ? b : c ? d : e → a ? b : (c ? d : e)
- 后置++/-- 是左结合但“延迟生效”:i++ + i++ 先取原值相加,再各自自增两次(结果不可靠,应避免)
三、实战避坑建议
优先级易错点不在冷门操作符,而在日常写法中的隐含歧义:
立即学习“Java免费学习笔记(深入)”;
- 位运算和比较混用时务必加括号:if ((flags & MASK) == MASK) 而非 if (flags & MASK == MASK)
- 字符串拼接 + 和算术 + 共存时,从左到右结合:"a"+1+2 → "a12",1+2+"a" → "3a",想先算数字就用括号:1+(2+"a") → "12a"
- 布尔表达式中 && 和 || 同现,记住 && 更“粘”:a || b && c 等价于 a || (b && c),不是 (a || b) && c
- 不确定时,用IDE快捷键(如IntelliJ的Ctrl+Alt+P)自动加括号,或直接手动加——多一对括号比调试半天强
四、快速验证方法
不依赖记忆,靠工具和代码验证最可靠:










