3 回答
TA贡献1801条经验 获得超8个赞
短路评估意味着在评估布尔表达式(逻辑AND和OR)时,只要找到满足或否定该表达式的第一个条件,就可以立即停止。
例如,假设您正在评估OR带有多个子表达式的逻辑,每个子表达式的评估成本非常高:
if (costlyTest1() || costlyTest2() || costlyTest3()) { // ...
一旦找到返回的JVM,JVM就可以停止评估“ costlyTest”函数true,因为这将满足布尔表达式。因此,如果costlyTest1()返回true,则其他测试将被跳过。类似地:
if (costlyTest1() && costlyTest2() && costlyTest3()) { // ...
JVM一旦找到返回的函数就可以停止评估函数false,因为它也满足表达式。因此,如果costlyTest1()返回false,则不会调用其他函数。
这些规则与布尔表达式的任何嵌套级别有关,可以利用它们来避免不必要的工作,如上面的示例所示。
TA贡献1898条经验 获得超8个赞
短路表达式的求值意味着在找到表达式的值之前,只需要对表达式的一部分进行求值。例如:
a == null || a.size() == 0
如果a为is null,a.size() == 0则不会对子表达式进行求值,因为布尔运算符的||求值true是其操作数之一是否为true。
同样,对于此表达式:
a != null && a.size() > 0
如果a为is null,a.size() > 0则将不对will进行求值,因为布尔运算符的&& 求值false是其操作数之一是否为false。
在上面的示例中,布尔运算符&&和||被称为短路,因为如果第一个操作数的值足以确定整个表达式的值,则第二个操作数可能不会被求值。为了进行比较,&和|操作数是等效的非短路布尔运算符。
添加回答
举报