在 Java 中!(逻辑非)和 ||(逻辑或)的优先级关系
🚀 优先级规则:
-
!
(逻辑非)的优先级高于||
(逻辑或)
这意味着在表达式中:!
会先计算||
后计算
-
运算符优先级从高到低排序:
!
> 算术运算符 > 比较运算符 >&&
>||
⚙️ 示例解析:
boolean a = false;
boolean b = true;// 情况 1: !a || b
// 等价于:(!a) || b → true || true → true
System.out.println(!a || b); // 输出 true// 情况 2: !(a || b)
// 等价于:先算 a || b (false || true = true),再取非 → !true → false
System.out.println(!(a || b)); // 输出 false
🛡️ 强制改变优先级的方法:
使用括号 ()
明确指定计算顺序:
// 需要先计算 || 再取非
boolean result = !(condition1 || condition2);// 需要先计算 ! 再执行 ||
boolean result = !condition1 || condition2;
✅ 完整运算符优先级表(相关部分):
优先级 | 运算符 | 类别 | 结合性 |
---|---|---|---|
最高 | ! ~ ++ -- | 一元运算符 | 右向左 |
↓ | * / % | 算术运算符 | 左向右 |
↓ | + - | 算术运算符 | 左向右 |
↓ | < <= > >= instanceof | 比较运算符 | 左向右 |
↓ | == != | 相等运算符 | 左向右 |
↓ | && | 逻辑与 | 左向右 |
最低 | <mark>` | `</mark> |
| **逻辑或** | 左向右 |
注:
&&
优先级高于||
(例如a && b || c
等价于(a && b) || c
)
🧠 记忆口诀:
"叹号先行,或最后行"
(!
最先计算,||
最后计算)
💡 实践建议:
在复杂逻辑表达式中,始终使用括号 ()
明确运算顺序,即使你熟悉优先级规则。这样做能:
- 避免歧义
- 提高代码可读性
- 防止优先级记忆错误导致的 bug
// 清晰写法(优于依赖优先级记忆)
if ((!isValid) || (count > MAX_VALUE)) {// 执行逻辑
}