Java逻辑运算需注意四点:仅作用于boolean类型;&&/||具短路性,&/|不短路;优先级易混淆,推荐加括号;Boolean包装类空值拆箱会抛NPE。

Java 逻辑运算出问题,多数不是因为不会用,而是没意识到几个关键细节:类型限制、短路行为、优先级陷阱和空值风险。只要盯住这四点,基本能避开绝大多数非预期结果。
只对 boolean 类型起作用
Java 的 &&、||、! 只接受 boolean 值,不能直接用于数字或对象引用。比如写 if (x & y) 或 if (!5) 会编译失败。
- 整数之间做“与或”必须用 &、|、^(位运算符),别混成 &&/||
- 判断对象是否为 null,得先转成布尔表达式:
obj != null,再参与逻辑运算 -
Boolean包装类要小心——null值在自动拆箱时抛NullPointerException
理解短路与非短路的区别
&& 和 || 是短路的:左边结果已能决定整体真假时,右边根本不会执行。而 & 和 | 对布尔类型也有效,但不短路——两边一定都算。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 安全空检查靠的是短路:
if (str != null && str.length() > 0),换&就可能 NPE - 如果右边有副作用(如日志、计数、状态修改),用错运算符会导致行为不一致
- 除非明确需要两边都执行,否则条件判断一律优先用 &&/||
括号比记忆优先级更可靠
逻辑运算符优先级是:! > && > ||,但跟比较运算符(==、、<code>>)混用时极易出错。
立即学习“Java免费学习笔记(深入)”;
- 像
!a == b实际等价于(!a) == b,不是a != b x > 0 || y > 0 && z 等价于 <code>x > 0 || (y > 0 && z ,不是 <code>(x > 0 || y > 0) && z- 复杂条件一律加括号,比如
!(x > 0 && y ,别省
别把 ! 当成 “不等于” 的简写
! 是一元取反,只作用于单个布尔表达式,不是二元比较操作符。
- 否定相等应写
!Objects.equals(a, b)或更直白的a != b(基础类型) - 写
!x > 0是语法错误——!不能作用于int - 否定复合条件必须包完整表达式:
!(flag1 && flag2),不是!flag1 && flag2

















