Java例項證明邏輯與和短路與的區別
阿新 • • 發佈:2018-12-16
一、邏輯運算子
&(與) 、|(或) 、!(非)&&(短路與)、||(短路或)、^(異或)
規則:
& 一個為假,則為假 邏輯與
| 一個為真,則為真 邏輯或
!非false則true,非true則false
&& 一個為假,則為假 短路與
|| 一個為真,則為真 短路或
^ 兩個不同,則為true,相同則為false
二、例項證明第二個表示式會不會執行
public class Optimize{ public static void main(String[] args){ int a=10; int b=20; //邏輯與 & boolean val1 = (a>b)&(a++<b); System.out.println("a ="+a);//11 System.out.println("==================="); //短路與 && a = 10; boolean val2 = (a>b)&&(a++<b); System.out.println("a ="+a);//10 } }
解釋說明:
由於邏輯與和短路與的共同特性是:一假則假
故:讓第一個表示式的值均為false,
區別在於:
邏輯與 ===》如果第一個表示式為false,還會繼續判斷第二個表示式
短路與 ===》如果第一個表示式為false,不會繼續判斷第二個表示式通過判斷 a++會不會執行來判斷第二個表示式會不會執行
三、短路與更優化(用時更少)
public class Optimize{ public static void main(String[] args){ /* 短路與和邏輯與的區別(&& vs &)*/ //總結:短路與更優化,用時更短 int a=10; int b=20; //邏輯與 & long startTime=System.nanoTime(); for(int i =1;i<1000;i++){ boolean val1 = (a>b)&(a++<b); } long endTime=System.nanoTime(); //System.out.println("vall ="+val1);//false 一假則假 System.out.println("當前程式耗時 :"+(endTime-startTime)+"納秒"); System.out.println("a ="+a);//11 System.out.println("==================="); //短路與 && a = 10; long startTime2=System.nanoTime(); for(int i =1;i<1000;i++){ boolean val2 = (a>b)&&(a++<b); } long endTime2=System.nanoTime(); //System.out.println("val2 ="+val2);//false 一假則假 System.out.println("當前程式耗時 :"+(endTime2-startTime2)+"納秒"); System.out.println("a ="+a);//10 } }
結果對比:
Web全棧技術交流
點選連結加入群聊【Web全棧交流群】:https://jq.qq.com/?_wv=1027&k=5rnUzsF