java中&&具有短路特性,左侧为false时右侧不执行,可用于避免空指针异常;推荐写法如if(user!=null&&user.isactive()),禁用&代替&&,链式判空需逐级检查或改用optional。
在 java 中,&&(逻辑与)具有短路特性:当左侧表达式为 false 时,右侧表达式**不会执行**。这一特性可被巧妙用于避免空指针异常(nullpointerexception),尤其在访问对象属性或调用方法前需先判空的场景中。
用 && 左侧做非空检查,右侧安全访问成员
这是最常见也最实用的方式。把可能为 null 的对象判空放在左边,把依赖该对象的操作放在右边。
例如:
✅ 安全写法(推荐):if (user != null && user.isActive()) { ... }
若 user 为 null,user.isActive() 不会被调用,避免空指针。
❌ 危险写法(不推荐):if (user.isActive() && user.getName().length() > 0) { ... }
一旦 user 为 null,第一步就抛出异常,后续判断无从谈起。
链式判空:多层对象安全访问
当需要访问嵌套对象(如 user.getAddress().getCity())时,可逐级用 && 判空:
if (user != null && user.getAddress() != null && user.getAddress().getCity() != null) {<br>
System.out.println(user.getAddress().getCity());<br>
}
注意:虽然可行,但嵌套过深时建议改用 Optional 或工具类(如 Apache Commons Lang 的 ObjectUtils)提升可读性与健壮性。
注意 & 和 && 的区别:别误用位运算符
& 是位与运算符(也用于布尔运算),但它不短路——左右两边总会执行。
例如:if (user != null & user.isActive()) { ... }
即使 user 为 null,user.isActive() 仍会被求值 → 空指针异常。
所以务必使用 &&,而非 &。
扩展技巧:配合三元运算或默认值简化逻辑
短路特性还可配合三元运算符提前返回默认行为:
String city = (user != null && user.getAddress() != null)<br> ? user.getAddress().getCity()<br> : "Unknown";
或者封装成工具方法,复用判空逻辑,让业务代码更干净。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











