等待
先计算左操作数。
从左到右 · 只执行必要部分
改变输入后重新求值,沿着四段轨迹观察:先得到左值,再决定右侧是执行还是跳过,最后才形成整个表达式的结果。
左侧为假时,右侧方法调用不会发生,因此不会对 null 调用 isBlank()。
text != null && !text.isBlank()
只有分母不为 0,才计算商并继续比较。这里不会在零分母时执行除法。
divisor != 0 && total / divisor > 10
当缓存已经命中,|| 会跳过 refresh();只有左侧为假时,刷新方法才被调用。
cached || refresh()
EXECUTION TRACE
等待
先计算左操作数。
等待
由运算符决定是否短路。
等待
执行或明确跳过。
等待
得到整个表达式的值。
选择输入后按“重新求值”,这里会用一句话解释本次执行。
&&:左假即停左侧已经是 false 时,整个“并且”不可能为真,右侧无需执行。
||:左真即停左侧已经是 true 时,整个“或者”必然为真,右侧无需执行。
若右侧会写文件、改计数或发请求,它可能因短路而完全不执行。把关键动作单独写成语句,意图更清楚。