短路是指当左侧操作数已能确定整个表达式结果时,JVM跳过右侧操作数的计算;&&左假则右不执行,||左真则右不执行,!为一元运算符无短路。

Java 中的 &&(逻辑与)和 ||(逻辑或)具有短路特性,而 !(逻辑非)不涉及短路——它只作用于单个布尔表达式,没有“跳过执行”的概念。
什么是短路?
短路是指:当左侧操作数已能确定整个表达式的最终结果时,JVM 不再计算右侧操作数。这不仅能提升效率,还能避免不必要的副作用(比如空指针、除零、方法调用等)。
&& 的短路规则:左假则右不执行
表达式 a && b 中,如果 a 为 false,整个结果必为 false,因此 b 不会被求值。
-
if (obj != null && obj.getName().length() > 0)—— 安全写法:先判空,再调用方法 -
if (false && dangerousMethod())——dangerousMethod()根本不会执行 - 注意:
&(按位与)不是短路运算符,它会强制计算两边,慎用于布尔逻辑
|| 的短路规则:左真则右不执行
表达式 a || b 中,如果 a 为 true,整个结果必为 true,因此 b 被跳过。
立即学习“Java免费学习笔记(深入)”;
-
if (user.isAdmin() || user.hasPermission("edit"))—— 若已是管理员,不查权限,提升响应速度 -
if (true || riskyOperation())——riskyOperation()不会触发 - 同样注意:
|(按位或)无短路行为,两边恒执行
! 没有短路,但常配合短路运算符使用
! 是一元运算符,只取反其后单个表达式的布尔值,不存在“左右”之分,自然无短路可言。但它常出现在短路表达式中:
-
if (!list.isEmpty() && list.get(0) > 5)——!修饰isEmpty(),短路仍由&&控制 if (!(x > 0 && y —— 整体取反,但内部 <code>&&依然短路
理解短路的关键在于:它不是语法糖,而是 Java 语言规范明确规定的求值顺序行为。合理利用短路,能让代码更安全、更高效、更具可读性。










