Skip to content

逻辑运算符

逻辑运算符一览

运算符名称说明
&&短路与两边都为 true 时返回 true
&逻辑与两边都为 true 时返回 true
||短路或任意一边为 true 时返回 true
|逻辑或任意一边为 true 时返回 true
!逻辑非取反
^异或两边不同时返回 true
java
boolean a = true;
boolean b = false;

System.out.println(a && b);  // false
System.out.println(a || b);  // true
System.out.println(!a);      // false
System.out.println(a ^ b);   // true

短路特性

&&|| 具有短路特性:左边条件能确定结果时,右边不执行。

&| 不短路,两边都执行。

&& 短路示例

java
int a = 10;

// 左边为 false,右边不执行
if (a < 5 && ++a > 20) { }
System.out.println("a = " + a);  // 10,未被改变

// & 不短路,++a 仍然执行
int b = 10;
if (b < 5 & ++b > 20) { }
System.out.println("b = " + b);  // 11

|| 短路示例

java
int a = 10;

// 左边为 true,右边不执行
if (a > 5 || ++a > 20) { }
System.out.println("a = " + a);  // 10

// | 不短路
int b = 10;
if (b > 5 | ++b > 20) { }
System.out.println("b = " + b);  // 11

真值表

AND (&& / &)

ABA && B
truetruetrue
truefalsefalse
falsetruefalse
falsefalsefalse

OR (|| / |)

ABA || B
truetruetrue
truefalsetrue
falsetruetrue
falsefalsefalse

XOR (^)

ABA ^ B
truetruefalse
truefalsetrue
falsetruetrue
falsefalsefalse

NOT (!)

A!A
truefalse
falsetrue

常见用法

范围判断

java
int age = 25;

// 判断是否在范围内
if (age >= 18 && age <= 60) {
    System.out.println("在工作年龄段");
}

// 判断是否在范围外
if (age < 18 || age > 60) {
    System.out.println("不在工作年龄段");
}

多条件组合

java
int age = 25;
boolean hasLicense = true;
boolean hasInsurance = true;

// 所有条件都满足
if (age >= 18 && hasLicense && hasInsurance) {
    System.out.println("可以租车");
}

// 任意条件不满足
if (age < 18 || !hasLicense || !hasInsurance) {
    System.out.println("不符合条件");
}

异或切换状态

java
boolean toggle = false;
toggle = !toggle;  // true
toggle = !toggle;  // false

优先级

! > && > ||
java
boolean result = !true && false;  // (!true) && false = false
boolean result2 = true || false && false;  // true || false = true

建议用括号明确优先级。

德摩根定律

!(A && B) = !A || !B
!(A || B) = !A && !B
java
// 原始
if (!(age >= 18 && age <= 60)) { ... }

// 简化后
if (age < 18 || age > 60) { ... }

两个建议

优先使用短路运算符 &&||,性能更好:

java
// ✅ 推荐:obj 为 null 时不调用 isValid()
if (obj != null && obj.isValid()) { ... }

// ❌ 不推荐:obj 为 null 时仍会调用,导致 NPE
if (obj != null & obj.isValid()) { ... }

避免复杂条件,提取为方法:

java
// ❌ 难以理解
if ((a > 10 && b < 20) || (c == 5 && d != 10) || e > 100) { ... }

// ✅ 清晰
if (isValidCondition() || isSpecialCase() || isLargeValue()) { ... }

简化技巧

java
// ❌ condition == true
if (condition == true) { ... }
// ✅
if (condition) { ... }

// ❌ condition == false
if (condition == false) { ... }
// ✅
if (!condition) { ... }

基于 VitePress 构建