java短路邏輯運(yùn)算符實(shí)例用法詳解
1、說明
邏輯操作符執(zhí)行短路求值。所謂短路,就是當(dāng)一個(gè)參與運(yùn)算的操作數(shù)足以推斷該表達(dá)式的值時(shí),另一個(gè)操作數(shù)(可能是表達(dá)式)就不會(huì)執(zhí)行。
在使用邏輯操作符時(shí),當(dāng)兩個(gè)操作數(shù)都是true時(shí),結(jié)果是true,但當(dāng)?shù)谝粋€(gè)操作是false時(shí),結(jié)果必須是false,此時(shí)不再判斷第二個(gè)操作。
2、實(shí)例
public static void main(String[] args) { int a = 5;//定義一個(gè)變量; boolean b = (a < 4) && (a++ < 10); //使用短路邏輯運(yùn)算符的結(jié)果為false System.out.println("使用短路邏輯運(yùn)算符的結(jié)果為" + b); //a的結(jié)果為5 System.out.println("a的結(jié)果為" + a); }
該程序使用短路邏輯邏輯運(yùn)算符(&&),首先判斷a<4的結(jié)果是false,b的結(jié)果是false,因此不再執(zhí)行第二操作a++<10的判斷,因此a的值為5。
知識(shí)點(diǎn)擴(kuò)展:
Java 提供了兩個(gè)在大多數(shù)其他計(jì)算機(jī)語言中沒有的有趣的布爾運(yùn)算符。這就是邏輯AND和邏輯OR的特殊的短路版本。
在邏輯OR的運(yùn)算中,如果第一個(gè)運(yùn)算數(shù)A為真,則不管第二個(gè)運(yùn)算數(shù)B是真是假,其運(yùn)算結(jié)果為真。
同樣,在邏輯AND的運(yùn)算中,如果第一個(gè)運(yùn)算數(shù)A為假,則不管第二個(gè)運(yùn)算數(shù)是真是假,其運(yùn)算結(jié)果為假。
如果運(yùn)用||和&&形式,而不是|和&,那么一個(gè)運(yùn)算數(shù)就能決定表達(dá)式的值,Java的短路版本就不會(huì)對(duì)第二個(gè)運(yùn)算數(shù)求值,只有在需要時(shí)才對(duì)第二個(gè)運(yùn)算數(shù)求值。為完成正確的功能,當(dāng)右邊的運(yùn)算數(shù)取決于左邊的運(yùn)算數(shù)是真或是假時(shí),短路版本是很有用的。例如,下面的程序語句說明了短路邏輯運(yùn)算符的優(yōu)點(diǎn),用它來防止被0除的錯(cuò)誤:
if (denom != 0 && num / denom > 10)
既然用了短路AND運(yùn)算符,就不會(huì)有當(dāng)denom為0時(shí)產(chǎn)生的意外運(yùn)行時(shí)錯(cuò)誤。如果該行代碼使用標(biāo)準(zhǔn)AND運(yùn)算符(&),它將對(duì)兩個(gè)運(yùn)算數(shù)都求值,當(dāng)出現(xiàn)被0除的情況時(shí),就會(huì)產(chǎn)生運(yùn)行時(shí)錯(cuò)誤。
既然短路運(yùn)算符在布爾邏輯運(yùn)算中有效,那么就在布爾邏輯運(yùn)算中全用它,而標(biāo)準(zhǔn)的AND和OR運(yùn)算符(只有一個(gè)字符)僅在位運(yùn)算中使用。然而,這條規(guī)則也有例外。例如,考慮下面的語句:
if(c==1 & e++ < 100) d = 100;
到此這篇關(guān)于java短路邏輯運(yùn)算符實(shí)例用法詳解的文章就介紹到這了,更多相關(guān)java短路邏輯運(yùn)算符是什么內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java創(chuàng)建線程池為什么一定要用ThreadPoolExecutor
本文介紹了Java創(chuàng)建線程池為什么一定要用ThreadPoolExecutor,手動(dòng)方式使用ThreadPoolExecutor創(chuàng)建線程池和使用Executors執(zhí)行器自動(dòng)創(chuàng)建線程池,下文更多相關(guān)內(nèi)容需要的小伙伴可以參考一下2022-05-05如何將字符串、字節(jié)數(shù)組轉(zhuǎn)為輸入流
這篇文章主要介紹了如何將字符串、字節(jié)數(shù)組轉(zhuǎn)為輸入流問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05Springboot快速集成sse服務(wù)端推流(最新整理)
SSE?Server-Sent?Events是一種允許服務(wù)器向客戶端推送實(shí)時(shí)數(shù)據(jù)的技術(shù),它建立在?HTTP?和簡(jiǎn)單文本格式之上,提供了一種輕量級(jí)的服務(wù)器推送方式,通常也被稱為“事件流”(Event?Stream),這篇文章主要介紹了Springboot快速集成sse服務(wù)端推流(最新整理),需要的朋友可以參考下2024-02-02java.lang.IllegalStateException異常解決
異常是程序在執(zhí)行過程中遇到的錯(cuò)誤或異常情況,本文就來介紹一下java.lang.IllegalStateException異常解決,感興趣的可以了解一下2023-11-11Java中調(diào)用DLL動(dòng)態(tài)庫的操作方法
在Java編程中,有時(shí)我們需要調(diào)用本地代碼庫,特別是Windows平臺(tái)上的DLL(動(dòng)態(tài)鏈接庫),本文中,我們將詳細(xì)討論如何在Java中加載和調(diào)用DLL動(dòng)態(tài)庫,并通過具體示例來展示這個(gè)過程,感興趣的朋友跟隨小編一起看看吧2024-03-03java定時(shí)任務(wù)的實(shí)現(xiàn)方法
java定時(shí)任務(wù)的實(shí)現(xiàn)方法,需要的朋友可以參考一下2013-03-03Java使用BigDecimal精確運(yùn)算浮點(diǎn)數(shù)
這篇文章主要介紹了Java使用BigDecimal精確運(yùn)算浮點(diǎn)數(shù),幫助大家更好的處理浮點(diǎn)數(shù)數(shù)據(jù),感興趣的朋友可以了解下2020-10-10