java中&&和||具有短路特性,可先判空再操作以避免nullpointerexception;&和|不短路,易触发异常;optional是更安全现代的替代方案。

Java 中的 && 和 || 运算符具有短路特性,可以在条件判断中先检查对象是否为 null,再安全调用其方法或访问属性,从而避免 NullPointerException。
用 && 避免调用空对象的方法
当左边表达式为 false 时,&& 不会执行右边表达式。因此可把非空判断放在左边:
-
if (str != null && str.length() > 0)—— 如果str为null,str.length()根本不会执行 - 错误写法:
if (str.length() > 0 && str != null)—— 一旦str为null,立刻抛出异常
用 || 提供默认值防止空指针
当左边表达式为 true 时,|| 跳过右边。常用于“存在即使用,否则取默认”逻辑:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
String name = user != null ? user.getName() : "Anonymous";可简化为:String name = (user != null && user.getName() != null) ? user.getName() : "Anonymous"; - 更简洁的替代(配合三元):
String name = user == null ? "Anonymous" : user.getName();,但若getName()也可能返回null,仍需嵌套短路:String name = user != null && user.getName() != null ? user.getName() : "Anonymous";
注意:短路只对 && 和 || 有效
& 和 | 是位运算符(也用于布尔运算),但不短路:
-
if (str != null & str.length() > 0)—— 即使str为null,str.length()仍会被执行,触发异常 - 只有 && 和 || 才保证左侧结果决定是否计算右侧
结合 Optional 更现代、更安全
短路是基础防护,但 Java 8+ 推荐用 Optional 显式表达可能为空的值:
Optional.ofNullable(user).map(User::getName).orElse("Anonymous")- 避免了手动判空,语义清晰,且天然防止误操作
- 短路逻辑仍在底层起作用,但由
Optional封装,不易出错
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










