全部学科
Python全栈
python
NodeJS全栈
nodejs
小程序首页
📅 2026-05-09 6 分钟 ✍️ juanwangdev

逻辑运算符

逻辑运算符用于组合多个boolean条件。

逻辑运算符概述

什么是逻辑运算符

逻辑运算符连接boolean表达式,返回boolean结果。

Java
// 逻辑运算结果
boolean result = true && false;  // false
boolean result2 = true || false;  // true
boolean result3 = !true;  // false

逻辑运算符列表

运算符说明示例结果
&&短路与true && falsefalse
短路或
!!truefalse
&逻辑与true & falsefalse
逻辑或true

短路与 &&

短路与规则

两个条件都为true才返回true,遇false立即停止。

Java
boolean a = true && true;   // true
boolean b = true && false;  // false
boolean c = false && true;  // false(遇false立即停止)
boolean d = false && false; // false

短路特性

Java
int x = 5;

// 短路与:第一个为false,不执行第二个
boolean result = x < 0 && x++ > 0;
// x < 0 为false,短路,x++不执行

System.out.println(x);  // 5(未自增)

// 与逻辑与对比
int y = 5;
boolean result2 = y < 0 & y++ > 0;
// 两个都执行,y++执行

System.out.println(y);  // 6(已自增)

短路与应用

Java
String str = null;

// 短路与避免NPE
if (str != null && str.length() > 0) {
    // str为null时,str!=null为false
    // 短路,str.length()不执行,避免NPE
    System.out.println(str);
}

// 错误顺序:会NPE
// if (str.length() > 0 && str != null) {  // NPE
// }

短路或 ||

短路或规则

任一条件为true就返回true,遇true立即停止。

Java
boolean a = true || true;   // true(遇true停止)
boolean b = true || false;  // true(遇true停止)
boolean c = false || true;  // true
boolean d = false || false; // false

短路特性

Java
int x = 5;

// 短路或:第一个为true,不执行第二个
boolean result = x > 0 || x++ > 0;
// x > 0 为true,短路,x++不执行

System.out.println(x);  // 5(未自增)

// 与逻辑或对比
int y = 5;
boolean result2 = y > 0 | y++ > 0;
// 两个都执行,y++执行

System.out.println(y);  // 6(已自增)

短路或应用

Java
String str = "hello";

// 短路或简化判断
if (str == null || str.isEmpty()) {
    System.out.println("字符串无效");
}

// 性能优化:易满足条件放前面
if (quickCheck() || expensiveCheck()) {
    // quickCheck为true时,expensiveCheck不执行
}

非 !

非运算规则

取反,true变false,false变true。

Java
boolean a = !true;   // false
boolean b = !false;  // true

// 多次取反
boolean c = !!true;  // true
boolean d = !!!true; // false

非运算应用

Java
boolean isValid = false;

if (!isValid) {
    System.out.println("无效");
}

// 与equals配合
String str = "hello";
if (!str.equals("world")) {
    System.out.println("不是world");
}

// 判断非空
if (!list.isEmpty()) {
    System.out.println("列表不为空");
}

逻辑与 & vs 短路与 &&

区别对比

特性&&(短路与)&(逻辑与)
结果相同相同
短路遇false停止不短路
效率更高较低
推荐推荐不常用
Java
int a = 5;

// 短路与:遇false停止
boolean r1 = a < 0 && a++ > 0;  // a++不执行
// a仍为5

// 逻辑与:不短路,两个都执行
boolean r2 = a < 0 & a++ > 0;   // a++执行
// a变为6

逻辑或 | vs 短路或 ||

区别对比

| 特性 | ||(短路或) | |(逻辑或) | |------|-------------|-------------| | 结果 | 相同 | 相同 | | 短路 | 遇true停止 | 不短路 | | 效率 | 更高 | 较低 | | 推荐 | 推荐 | 不常用 |

Java
int a = 5;

// 短路或:遇true停止
boolean r1 = a > 0 || a++ > 0;  // a++不执行
// a仍为5

// 逻辑或:不短路,两个都执行
boolean r2 = a > 0 | a++ > 0;   // a++执行
// a变为6

真值表

短路与真值表

Java
A       B       A && B
true    true    true
true    false   false
false   true    false(短路)
false   false   false(短路)

短路或真值表

Java
A       B       A || B
true    true    true(短路)
true    false   true(短路)
false   true    true
false   false   false

非运算真值表

text
A       !A
true    false
false   true

逻辑运算组合

多条件组合

text
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("不能开车");
}

复杂条件

text
int score = 85;
boolean passed = true;

// 组合使用
if (score >= 60 && passed) {
    System.out.println("通过");
}

// 德摩根定律
// !(A && B) = !A || !B
// !(A || B) = !A && !B

boolean notValid = !(score >= 60 && passed);
// 等价于
boolean notValid2 = score < 60 || !passed;

运算符优先级

逻辑运算优先级

text
优先级(从高到低):
1. !(非)
2. &&(短路与)
3. ||(短路或)

// 示例
boolean result = !true && false;  // false && false = false
boolean result2 = true || false && false;  // true || false = true
// &&优先级高于||,所以先算false && false = false,再true || false = true

// 使用括号明确
boolean result3 = (true || false) && false;  // true && false = false

要点总结

  • &&短路与:都为true才true,遇false停止
  • ||短路或:任一true就true,遇true停止
  • !非:取反,true变false
  • &逻辑与:不短路,两个都执行
  • |逻辑或:不短路,两个都执行
  • 推荐使用短路运算符(效率高)
  • 短路运算符避免不必要的执行
  • 常用于null检查避免NPE
  • !优先级最高,&&高于||
  • 复杂条件使用括号明确优先级
  • 德摩根定律简化逻辑表达式

📝 发现内容有误?点击此处直接编辑

← 上一篇 赋值运算符
下一篇 → 数组的定义与初始化
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库