Java中!是逻辑非一元运算符,用于将布尔值取反,仅作用于布尔类型,常用于if/while条件简化及避免冗余比较,优先级高于&&和||但低于括号,复杂表达式需加括号确保逻辑正确。

Java 中用 !(逻辑非)运算符可以对布尔表达式取反,把 true 变成 false,false 变成 true。它是一元运算符,只作用于一个布尔值或布尔表达式,常用于条件判断、循环控制和简化逻辑。
基本用法:对布尔变量或字面量取反
直接在布尔变量或 true/false 前加 ! 即可反转其值:
-
boolean flag = true;→!flag结果为false -
!true得false,!false得true - 注意:! 不能作用于非布尔类型(如数字、字符串),否则编译报错
常用场景:在 if 和 while 中简化条件判断
比起写冗余的 == false 或 != true,用 ! 更简洁清晰:
- ✅ 推荐:
if (!isLoggedIn) { ... } - ❌ 不推荐:
if (isLoggedIn == false) { ... }或if (isLoggedIn != true) { ... } - 循环中也类似:
while (!isDone) { ... }比while (isDone == false) { ... }更自然
嵌套与优先级:注意括号避免歧义
! 的优先级高于 && 和 ||,但低于括号。复杂表达式中不加括号容易出错:
立即学习“Java免费学习笔记(深入)”;
-
!a && b等价于(!a) && b,不是!(a && b) - 想取反整个表达式,必须加括号:
!(a && b)或!(a || b) - 例如:
if (!(score >= 60 && score 表示“分数不在合格范围内”
常见误区:别对方法调用结果盲目取反
有些方法返回布尔值,取反前要确认语义是否合理:
-
list.isEmpty()返回true表示空,!list.isEmpty()才表示“非空”,这是常用且安全的 - 但像
isValid()这类方法名已含否定意味时,!isValid()就是“无效”,语义仍清晰;而!isInvalid()容易让人困惑,建议重命名方法而非双重否定 - 避免连续多个 !,如
!!flag(等价于flag),可读性差,无实际意义


















