一、什么是逻辑运算符?
逻辑运算符用于连接多个布尔表达式
(即返回值为 true
或 false
的表达式),根据逻辑规则(如与、或、非)对表达式进行运算,最终得到一个布尔值。
二、基础逻辑运算符(3种)
1、&&逻辑与(短路与)
语法:
java
boolean a = true, b = false;
System.out.println(a && b); // false(全真才真)
说明:
- 当第一个表达式为
false
时,Java 不再判断第二个表达式,直接返回false
。这种行为称为"短路"
- 常用于
防止空指针异常
:
java
if (obj != null && obj.getValue() > 10) {
// 安全执行 obj.getValue()
}
2、||逻辑或(短路或)
语法:
java
boolean a = true, b = false;
System.out.println(a || b); // true(有真即真)
说明:
- 当第一个表达式为
true
时,Java 会跳过第二个表达式的计算 - 常用于
提供备选条件
:
java
if (user.isAdmin() || user.hasPermission("EDIT")) {
// 允许访问
}
3、!逻辑非
语法:
java
boolean a = true,
System.out.println(!a); // false(取反)
说明:
- 对布尔表达式
取反
- 常用于
状态切换
或条件反向
:
java
if (!isValid) {
System.out.println("数据无效!");
}
四、非短路逻辑运算符(2种)和异或(1种)
& | ^
被同时用于逻辑运算
和位运算
,源于编程语言的语法设计:当操作数为布尔值
时执行逻辑运算,为整数
时执行位运算。
1、&与|(非短路)
与&&和|的异同:
- 相同点:对于逻辑运算&&和&与||和|运算返回结果一致
- 不同点:
&
和|
会始终计算两个表达式
,无论第一个表达式的值如何
java
boolean result = (a > 0) & (b++ > 0); // b 一定会自增
2、^异或
语法:
java
System.out.println(true ^ true); // false
System.out.println(false ^ false); // false
System.out.println(true ^ false); // true
说明:
- 两个表达式
一个为真,一个为假
时,结果才为true
- 实际上可以用于
检查两个状态是否"互斥"
:
java
boolean isSingle = true;
boolean isMarried = false;
if (isSingle ^ isMarried) {
System.out.println("状态有效");
}
五、逻辑运算符优先级
优先级从高到低(部分):
!
(逻辑非)&&
(逻辑与)||
(逻辑或)
java
// 复杂表达式示例
boolean result = !false || true && false;
// 等价于:(true) || (true && false) → true
// 使用括号明确意图(推荐!)
boolean safeResult = (!false) || (true && false);
总结
&&、|| 和 !
是逻辑运算符,用于布尔值判断
,返回布尔值;而 &、|、^
是常用于按位运算符,用于按位操作整数
,返回整数(下篇文章细讲),这里&、|、^ 也可以用于逻辑运算符。
运算符 | 名称 | 描述 |
---|---|---|
&& |
逻辑与(AND) | 两个条件都为 true 时,结果为 true |
` | ` | |
! |
逻辑非(NOT) | 取反操作,将 true 变成 false ,反之亦然 |
& |
位与 | 逻辑与运算但不会短路 (始终计算两侧表达式) |
` | ` | 位或 |
^ |
异或 | 两个条件不同为 true ,相同为 false |