分析:
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");
System.out.println(a);
}
}
}
此處由於a<b為假 ,所以 后面的b<a++不會執行
此處的結果為
that's impossible
1
若假設a的初值為0,此時a<b成立,這時就要計算后面的值了
結果應該為和上面一樣。
網上看見有人對 && 與 & 有點混淆,順便說說我的理解
本來 & 是個 位運算符
也就是主要用來 做二進制運算的,如 010101&101010 = 000000
但它的特別之處 在於 它可以 進行 boolean值的運算
就像我上面寫的 a>b&true
其實我想這追根究地 在於 boolean 在內存中是用一位二進制來表示的,故可以進行位運算
我們不能被表象所迷惑 ,認為這是邏輯運算 ,這樣理解就根本不存在討論短路的必要了。
參考原文:https://blog.csdn.net/a_15810201906/article/details/78671976
注意點:
1、基本規則
名稱 語法 特點
短路&& 條件1&&條件2 兩個條件都為True,結果為True,其他為False
邏輯& 條件1&條件2 兩個條件都為True,結果為True,其他為False
2、使用區別
1、短路&&:如果第一個條件False,第二個條件不做判斷,最終結果False,效率高
2、邏輯&:不管第一個條件是否為False,第二個條件都要判斷,效率低
3、開發中,我們基本都使用短路&&,效率高
短路或|| 與邏輯或|與以上道理相同,在此不再贅述。