杰瑞科技汇

Java中and/or的优先级到底谁更高?

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

Java中and/or的优先级到底谁更高?-图1
(图片来源网络,侵删)
  1. (逻辑非) 的优先级最高。
  2. && (逻辑与) 的优先级次之。
  3. (逻辑或) 的优先级最低。

可以简化记为: > && >


详细解释与示例

逻辑非

的优先级最高,它会首先对其后面的表达式进行求反。

示例:

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),但事实并非如此。 总是先执行。

Java中and/or的优先级到底谁更高?-图2
(图片来源网络,侵删)

逻辑与 &&

&& 的优先级高于 ,在混合使用时,&& 连接的部分会先被计算。

示例:

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,计算过程会完全不同:

  1. x || y = true || false = true
  2. true && z = true && true = true 在这个特定例子中,结果碰巧相同,但这只是巧合,不能作为普遍规律。&& 优先级更高是正确的规则。

逻辑或

的优先级是三者中最低的,当它与 && 混合时,它总是最后计算。

Java中and/or的优先级到底谁更高?-图3
(图片来源网络,侵删)

示例:

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)

  1. q || r = true || false = true
  2. p && 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

这个例子清晰地证明了 && 的优先级高于 。


与其他运算符的优先级对比

逻辑运算符的优先级位于关系运算符(如 >, <, )和算术运算符(如 , )之后。

完整的运算符优先级(从高到低)简化版:

  1. (括号) - 最高
  2. (逻辑非)
  3. 算术运算符 (, , ), 关系运算符 (>, <, >=, <=), 相等运算符 (, )
  4. && (逻辑与)
  5. (逻辑或)
  6. 赋值运算符 (, 等) - 最低

示例:

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); // 如果这是你的本意
运算符 名称 优先级 结合性
逻辑非 从右到左
&& 逻辑与 从左到右
逻辑或 从左到右

核心要点:

  1. > && >
  2. 当不确定或表达式复杂时,使用括号 是最安全、最清晰的做法。
分享:
扫描分享到社交APP
上一篇
下一篇