[原創]邏輯與(&)和邏輯或(|) VS 短路與(&&)和短路或(||)
阿新 • • 發佈:2019-02-02
這個曾經讓我分不清的兩個東東,今天專門拿出來做一小結,以備日後查閱。並附Java四大運算子和比較運算子簡介。
1. 邏輯與(&)和邏輯或(|):
標準的邏輯與(&)和邏輯或(|),不論第一個表示式為true or false,都計算第二個表示式。
例如:if (c==0 | e++ < 100) { d=12;}
//不論c是否等於0,e都被自增量。
2. 短路與(&&)和短路或(||)
A&&B, 當A為false時,不去計算B的值而直接返回false;當A為true時,計算B的值。
A || B,當A為true時, 不去計算B的值而直接返回true;當A為false時,計算B的值。
3. 應用比較
短路&& 是很有用的。例如,下面的程式語句說明了短路邏輯運算子的優點,用它來防止被0除的錯誤:
if (denom != 0 && num / denom > 10)
既然用了短路與(&&) 運算子,就不會有當denom為0時產生的意外執行時錯誤。如果該行程式碼使用標準與 運算子(&),它將對兩個運算數都求值,當出現被0除的情況時,就會產生執行時錯誤。
既然短路運算子在布林邏輯運算中有效,那麼就在布林邏輯運算中全用它,而標準的AND 和OR運算子(只有一個字元)僅在位運算中使用。
4. Java四大運算子:算術運算子、位運算、關係運算、邏輯運算
另外還有比較運算子(instanceof)
A> 算術與位運算就不說了,一般不容易出錯 B> 關係運算符: == > < <= >= != 關係運算的結果為boolean,只有true和false,不像C/C++中,非0為true,0為false。 boolean flag= a<c; //這種寫法是正確的. 例如: if(a == b) {} //如果是正確的,進行運算; 賦值運算子 = 是賦值的, 如: int a = 5; //不是 int a == 5; C> 布林邏輯運算子 布林邏輯運算的運算數只能是布林型,結果也為boolean型 邏輯與(&)和邏輯或(|) 及 短路與(&&)和短路或(||) 的區別見上。