1. 程式人生 > >[原創]邏輯與(&)和邏輯或(|) VS 短路與(&&)和短路或(||)

[原創]邏輯與(&)和邏輯或(|) VS 短路與(&&)和短路或(||)

   這個曾經讓我分不清的兩個東東,今天專門拿出來做一小結,以備日後查閱。並附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型

                   邏輯與(&)和邏輯或(|)  及   短路與(&&)和短路或(||) 的區別見上。