1. 程式人生 > >Java例項證明邏輯與和短路與的區別

Java例項證明邏輯與和短路與的區別

一、邏輯運算子


&(與) 、|(或) 、!(非)&&(短路與)、||(短路或)、^(異或)

規則:

& 一個為假,則為假 邏輯與

|  一個為真,則為真 邏輯或

!非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

QQ群二維碼