• <nav id="wkkge"><strong id="wkkge"></strong></nav>
  • <menu id="wkkge"></menu>
  • Java教程
    Java標識符與關鍵字
    Java變量
    Java數據類型
    Java運算符
    Java控制語句
    Java方法
    Java面向對象
    Java對象的創建和使用
    Java封裝
    Java中static和this
    Java繼承
    Java方法覆蓋和多態
    Java super
    Java基礎練習題

    Java邏輯運算符

     

     

    邏輯運算符主要包括邏輯與(&),邏輯或(|),邏輯異或(^),短路與(&&),短路或(||)。所有邏輯運算符的特點是操作數都是布爾類型,并且最終的運算結果也是布爾類型。邏輯運算符的基本運算規則如下表所示:

     

    操作符 例子 結果 描述

    &

    true&true

    true

    (5>3) & (5>4):5大于3并且5大于4,有道理

    |

    true|false

    true

    (5>3) | (5>10):5大于3或者5大于10,沒毛病

    !

    !false

    true

    false取反是true,true取反就是false

    ^

    true^false

    true

    異或運算符,只要兩邊的操作數不同,結果就是true

    &&

    true&&true

    true

    短路與(&&)和邏輯與(&)實際上最終的運行結果是完全相同的,只不過短路與(&&)會存在短路現象。

    ||

    true||false

    true

    短路或(||)和邏輯或(|)實際上最終的運行結果是完全相同的,只不過短路或(||)會存在短路現象。

     

    接下來我們來研究一段代碼,重點看看短路是如何發生的:

     

    public class LogicalOperatorTest01 {
    	public static void main(String[] args) {
    		System.out.println(5 > 3 & 5 > 4); //true
    		System.out.println(5 > 100 | 5 > 4); //true
    		System.out.println(!(5 > 3)); //false
    		System.out.println(!(5 < 3)); //true
    		System.out.println(true & true); //true
    		System.out.println(true & false); //false
    		System.out.println(true | false); //true
    		System.out.println(!false); //true
    		System.out.println(!true); //false
    		System.out.println(true ^ false); //true
    		System.out.println(true ^ true); //false
    		System.out.println(false ^ false); //false
    		//重點研究邏輯與(&)和短路與(&&)的區別
    		int x = 100;
    		int y = 98;
    		int z = 99;
    		System.out.println(x > y & x > z); //true
    		System.out.println(x > y && x > z); //true
    		//通過以上測試得出,邏輯與(&)和短路與(&&)最終運行結果相同
    		//那么它們有什么區別呢?請看以下代碼。
    		int m = 99;
    		int n = 100;
    		System.out.println(m > n & m > n++); //false
    		//邏輯與(&)運算符,只有當兩邊的操作數都是true的時候,結果才是
    		//true,只要有一個是false,結果必然是false。以上程序邏輯與
    		//左邊的表達式(m > n)顯然結果是false,通過左邊的表達式已經可
    		//以得出結果是false了,右邊的表達式沒有執行的必要,那我們來看一下
    		//右邊的表達式有沒有執行,只要輸出n就可以了斷定。
    		System.out.println("n = " + n); //101
    		//以上程序的運行結果是101,足以說明n++已經執行了。也說明了邏輯與
    		//運算符無論左邊表達式結果是true還是false,右邊表達式一定會執行。
    		//那我們來看一下短路與(&&)是怎樣的?
    		int k = 99;
    		int f = 100;
    		System.out.println(k > f && k > f++); //false
    		System.out.println("f = " + f); //100
    		//通過以上測試得出f++并沒有執行,因為左邊表達式(k > f)為false
    		//右邊的表達式就不再執行了,這種現象被稱為短路現象。也就是說對于短路與
    		//來說,左邊的表達式只要為false,就會發生短路,右邊表達式不再執行了。
    	}
    }

     

    通過以上的測試,可以得出短路與(&&)在左邊的表達式結果為false的時候,右邊的表達式則不再執行,這種現象被稱為短路現象,這種機制也顯得短路與比較智能一些,效率更高一些,所以在實際開發中短路與(&&)的使用率要比邏輯與高一些。但這并不是絕對的,有的時候也可能會選擇使用邏輯與(&),這取決于你是否期望右邊的表達式一定執行。

     

    大家思考一個問題,短路或(||)在什么情況下會發生短路現象呢?

     

    全部教程
  • <nav id="wkkge"><strong id="wkkge"></strong></nav>
  • <menu id="wkkge"></menu>
  • 面对面棋牌游戏