记住这个优先级顺序,你就能轻松理解复杂逻辑表达式:

- (逻辑非) 的优先级最高。
&&(逻辑与) 的优先级次之。- (逻辑或) 的优先级最低。
可以简化记为: > && >
详细解释与示例
逻辑非
的优先级最高,它会首先对其后面的表达式进行求反。
示例:
boolean a = true; boolean b = false; // 表达式:!a && b // 1. 先计算 !a,结果为 false // 2. 再计算 false && b,结果为 false boolean result = !a && b; // result = false
对比:
的优先级低,!a && b 会被解释为 !(a && b),但事实并非如此。 总是先执行。

逻辑与 &&
&& 的优先级高于 ,在混合使用时,&& 连接的部分会先被计算。
示例:
boolean x = true; boolean y = false; boolean z = true; // 表达式:x || y && z // 1. 先计算 y && z (因为 && 优先级高) // y && z = false && true = false // 2. 再计算 x || (上一步的结果) // x || false = true || false = true boolean result = x || y && z; // result = true
对比:
的优先级高,x || y && z 会被解释为 (x || y) && z,计算过程会完全不同:
x || y=true || false=truetrue && z=true && true=true在这个特定例子中,结果碰巧相同,但这只是巧合,不能作为普遍规律。&&优先级更高是正确的规则。
逻辑或
的优先级是三者中最低的,当它与 && 混合时,它总是最后计算。

示例:
boolean p = false; boolean q = true; boolean r = false; // 表达式:p && q || r // 1. 先计算 p && q (因为 && 优先级高) // p && q = false && true = false // 2. 再计算 (上一步的结果) || r // false || r = false || false = false boolean result = p && q || r; // result = false
对比:
如果错误地认为 优先级更高,p && q || r 会被解释为 p && (q || r):
q || r=true || false=truep && true=false && true=false在这个例子中,结果又碰巧相同,让我们换一个例子就能看出区别:
boolean p = false; boolean q = true; boolean r = true; // 按照正确优先级 p && q || r // 1. p && q = false && true = false // 2. false || r = false || true = true // 结果: true // 按照错误优先级 p && (q || r) // 1. q || r = true || true = true // 2. p && true = false && true = false // 结果: false
这个例子清晰地证明了 && 的优先级高于 。
与其他运算符的优先级对比
逻辑运算符的优先级位于关系运算符(如 >, <, )和算术运算符(如 , )之后。
完整的运算符优先级(从高到低)简化版:
- (括号) - 最高
- (逻辑非)
- 算术运算符 (, , ), 关系运算符 (
>,<,>=,<=), 相等运算符 (, ) &&(逻辑与)- (逻辑或)
- 赋值运算符 (, 等) - 最低
示例:
int a = 5; int b = 10; int c = 15; boolean result = a < b && b < c || a > c; // 计算过程: // 1. a < b -> 5 < 10 -> true // 2. b < c -> 10 < 15 -> true // 3. true && true -> true // 4. true || a > c -> true || 5 > 15 -> true || false -> true // 最终结果: true
这个表达式会被解释为 (a < b && b < c) || (a > c),因为关系运算符和 && 的优先级都高于 。
最佳实践:使用括号提高可读性
虽然记住优先级规则很重要,但在编写复杂的逻辑表达式时,强烈推荐使用括号 来明确你的意图,这不仅能确保代码按你期望的方式执行,还能极大地提高代码的可读性,减少错误。
不推荐的写法(容易混淆):
boolean result = !isUserActive && hasPermission || isAdmin;
推荐的写法(清晰明了):
boolean result = (!isUserActive && hasPermission) || isAdmin; // 或者 boolean result = !isUserActive && (hasPermission || isAdmin); // 如果这是你的本意
| 运算符 | 名称 | 优先级 | 结合性 |
|---|---|---|---|
| 逻辑非 | 高 | 从右到左 | |
&& |
逻辑与 | 中 | 从左到右 |
| 逻辑或 | 低 | 从左到右 |
核心要点:
- >
&&> - 当不确定或表达式复杂时,使用括号 是最安全、最清晰的做法。
