天天看點

JAVA中&&和&、||和|(短路與和邏輯與、短路或和邏輯或)的差別

JAVA中&&和&、||和|(短路與和邏輯與、短路或和邏輯或)的差別

分析:

1、短路與(&&):所謂短路,就是當參與運算的一個操作數已經足以推斷出這個表達式的值的時候,另外一個操作數(有可能是表達式)就不會 執行。短路或(||),同理。

即:對于短路與、短路或而言,隻要一個條件可以判斷出結果時,另一個條件就不再判斷。

2、邏輯與(&):沒有上述特性,不管那邊的值是如 何,任何參與運算的表達式都會被執行求值,是以也就産生了你代碼之中的結果了。

3、ava中邏輯運算短路的了解:

短路” 主要用于邏輯運算符中,即 “ !   && || "這三種運算符

短路 就是知如果左側的表達式能确定運算後的結果,則不再計算右側的表達式。

如(1>2)&&(2<3)   明明左側已經為假 了   ,我 不用計算右側我一定知道 此表達是為假,這樣 就好似實體中的電流,當某處短路時,電流直接從一條路通過,而不再管另一條路。

 看個例子:

public class Logic{

public static void main(String[] args){

int a = 1;

int b = 1;

if(a<b&&b<a++){

System.out.println(a>b&true);

System.out.println(a);

System.out.println("this's in my control");

}

else{

System.out.println("that's impossible");

此處由于a<b為假 ,是以 後面的b<a++不會執行

此處的結果為 

that's impossible

1

若假設a的初值為0,此時a<b成立,這時就要計算後面的值了

結果應該為和上面一樣。

網上看見有人對   && 與 & 有點混淆,順便說說我的了解

本來 & 是個 位運算符

也就是主要用來 做二進制運算的,如 010101&101010 = 000000

但它的特别之處 在于 它可以 進行 boolean值的運算

就像我上面寫的   a>b&true 

其實我想這追根究地 在于 boolean 在記憶體中是用一位二進制來表示的,故可以進行位運算

我們不能被表象所迷惑 ,認為這是邏輯運算 ,這樣了解就根本不存在讨論短路的必要了。

注意點:

1、基本規則

名稱                                  文法                                                  特點

短路&&                     條件1&&條件2           兩個條件都為True,結果為True,其他為False

邏輯&                         條件1&條件2           兩個條件都為True,結果為True,其他為False     

2、使用差別

1、短路&&:如果第一個條件False,第二個條件不做判斷,最終結果False,效率高

2、邏輯&:不管第一個條件是否為False,第二個條件都要判斷,效率低

繼續閱讀