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。
在上面的示例中,布爾運算符&&和||被稱為短路,因為如果第一個操作數的值足以確定整個表達式的值,則第二個操作數可能不會被求值。為了進行比較,&和|操作數是等效的非短路布爾運算符。
添加回答
舉報
