Java 長(zhǎng)短路邏輯運(yùn)算

  • 長(zhǎng)路與運(yùn)算 &
  • 短路與運(yùn)算 &&
  • 長(zhǎng)路或運(yùn)算 |
  • 短路或運(yùn)算 ||

長(zhǎng)路與運(yùn)算 &

運(yùn)行如下程序:

public class LogicCalculate {
    public static void main(String[] args) {
        int int1 = 1;
        int int2 = 2;
        int res1 = int1 & int2;
        boolean res2 = int1>0 & int2<3 ;

        System.out.println(res1);
        System.out.println(res2);

    }
}

返回結(jié)果為:

0
true

對(duì)于長(zhǎng)路與運(yùn)算 &:

  1. 當(dāng)運(yùn)算符兩邊都是整數(shù)時(shí),會(huì)進(jìn)行逐位與運(yùn)算(二進(jìn)制邏輯運(yùn)算);當(dāng)兩邊是關(guān)系運(yùn)算時(shí),是邏輯運(yùn)算。
    2.長(zhǎng)路與運(yùn)算會(huì)將兩邊的關(guān)系運(yùn)算結(jié)果都計(jì)算出來(lái)(不明白的話看到下面的短路與運(yùn)算就知道了)。
短路與運(yùn)算 &&

簡(jiǎn)單修改上面的代碼運(yùn)行如下程序:

public class LogicCalculate {
    public static void main(String[] args) {
        int int1 = 1;
        int int2 = 2;
        int res1 = int1 && int2;
        boolean res2 = int1>0 && int2<3 ;

        System.out.println(res1);
        System.out.println(res2);

    }
}

上面的代碼會(huì)在 int res1 = int1 && int2;處報(bào)錯(cuò),報(bào)錯(cuò)信息為‘&&’操作符不能被用于int,int。顯然,短路運(yùn)算符不支持按位邏輯運(yùn)算

運(yùn)行如下代碼

public class LogicCalculate {
    public static void main(String[] args) {
        int int1 = 1;
        int int2 = 2;
        boolean res2 = int1<0 && int2<3 ;

        System.out.println(res2);

    }
}

運(yùn)行結(jié)果為 false

短路與運(yùn)算 && 與長(zhǎng)路與運(yùn)算 &的區(qū)別在于:

  • 短路運(yùn)算不支持按位運(yùn)算。
  • 如果左條件為false, && 運(yùn)算將不會(huì)再繼續(xù)計(jì)算右邊關(guān)系表達(dá)式,這樣能提高程序的效率。
長(zhǎng)路或運(yùn)算 |

運(yùn)行如下代碼:

public class LogicCalculate {
    public static void main(String[] args) {
        int int1 = 1;
        int int2 = 2;

        int res1 = int1 | int2;
        boolean res2 = int1>0 | int2<1;



        System.out.println(res1);
        System.out.println(res2);

    }
}

運(yùn)行結(jié)果為:

3
true

對(duì)于長(zhǎng)路或運(yùn)算 |:

當(dāng)運(yùn)算符兩邊都是整數(shù)時(shí),會(huì)進(jìn)行按位或運(yùn)算(二進(jìn)制邏輯運(yùn)算);當(dāng)兩邊是關(guān)系運(yùn)算時(shí),是邏輯運(yùn)算。
2.長(zhǎng)路或運(yùn)算會(huì)將兩邊的關(guān)系運(yùn)算結(jié)果都計(jì)算出來(lái),不管左邊的關(guān)系表達(dá)式是不是true。

短路或運(yùn)算 ||

簡(jiǎn)單修改上面的代碼運(yùn)行如下程序:

public class LogicCalculate {
    public static void main(String[] args) {
        int int1 = 1;
        int int2 = 2;

        boolean res1 = int1>0 || int2<1;
        System.out.println(res1);

    }
}

運(yùn)行結(jié)果為 true

短路與運(yùn)算 || 與長(zhǎng)路與運(yùn)算 | 的區(qū)別在于:

  • 短路運(yùn)算不支持按位運(yùn)算。
  • 如果左條件為T(mén)rue, || 運(yùn)算將不會(huì)再繼續(xù)計(jì)算右邊關(guān)系表達(dá)式,這樣能提高程序的效率。

結(jié)論:

  • 長(zhǎng)路邏輯運(yùn)算支持按位運(yùn)算,而短路運(yùn)算不支持。
  • 短路邏輯運(yùn)算相較于長(zhǎng)路邏輯運(yùn)算,效率更高,因此進(jìn)行邏輯運(yùn)算時(shí)應(yīng)當(dāng)使用短路邏輯運(yùn)算符。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • ?1 C語(yǔ)言程序的結(jié)構(gòu)認(rèn)識(shí) 用一個(gè)簡(jiǎn)單的c程序例子,介紹c語(yǔ)言的基本構(gòu)成、格式、以及良好的書(shū)寫(xiě)風(fēng)格,使讀者對(duì)c語(yǔ)...
    CONLYOUC閱讀 8,735評(píng)論 9 66
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類相關(guān)的語(yǔ)法,內(nèi)部類的語(yǔ)法,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法,線程的語(yǔ)...
    子非魚(yú)_t_閱讀 31,766評(píng)論 18 399
  • C++運(yùn)算符重載-上篇 本章內(nèi)容:1. 運(yùn)算符重載的概述2. 重載算術(shù)運(yùn)算符3. 重載按位運(yùn)算符和二元邏輯運(yùn)算符4...
    Haley_2013閱讀 2,323評(píng)論 0 51
  • 為了見(jiàn)你 特地?fù)Q上灰西褲與小白鞋 在時(shí)間流逝的失望中安慰自己 我們約好的 日落時(shí)分 晴天冷漠看向我 他不會(huì)來(lái)了 我...
    姬雨彤v閱讀 143評(píng)論 0 0
  • 我們有一個(gè)項(xiàng)目是需要做橫豎屏旋轉(zhuǎn)的,就是根據(jù)服務(wù)器返回的指令做個(gè)旋轉(zhuǎn),總結(jié)一下:兩種根據(jù)服務(wù)器指令來(lái)旋轉(zhuǎn)屏幕都需要...
    Bob林閱讀 927評(píng)論 0 5