一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

JAVA中&&和&、||和|(短路與和邏輯與、短路或和邏輯或)的區(qū)別

 匆匆那哖 2016-07-16

 

問題一:

JAVA中&&和&、||和|(短路與和邏輯與、短路或和邏輯或)的區(qū)別?


首先名稱是不同的
&&邏輯與 ?。壿嫽颉 ∷鼈兌际沁壿嬤\(yùn)算符
& 按位與  | 按位或  它們都是位運(yùn)算符
if(a==1&&b==2) 這是說既要滿足a=1也要滿足b=2
if(a==1||b==2) 這是說或者滿足a=1或者要滿足b=2
而a&b或者a|b則是二進(jìn)制的與或運(yùn)算
&同為1時為1,否則為0
|同為0時為0,否則為1
3&5則
?。埃埃保?br> &0101
?。埃埃埃?br> 等于1

3|5則
?。埃埃保?br> |0101
?。埃保保?br> 等于7


&&邏輯與 也叫做短路與 因?yàn)橹灰?dāng)前項(xiàng)為假,它就不往后判斷了,直接認(rèn)為表達(dá)式為假
||邏輯或 也叫做短路或 因?yàn)橹灰?dāng)前項(xiàng)為真,它也不往后判斷了,直接認(rèn)為表達(dá)式為真




問題二:

關(guān)于Java 中邏輯運(yùn)算與位運(yùn)算的區(qū)別(具體到解一道題)

題目出自Java2實(shí)用教程(第三版)(卻沒有解釋)

 

程序如下圖:

 

 

 

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

 

為什么? x,y,a,b 不是都在IF語句里都重新賦值了嗎?按道理全為真了,y也該是20了吧?(用程序驗(yàn)證過了,的確是這個結(jié)果)

 

 

回答:

 

 

邏輯運(yùn)算符執(zhí)行的是短路求值
所謂短路,就是當(dāng)參與運(yùn)算的一個操作數(shù)已經(jīng)足以推斷出這個表達(dá)式的值的時候,另外一個操作數(shù)(有可能是表達(dá)式)就不會 執(zhí)行

比如:
static boolean f1() { System.out.println( "function f1 called." ); return true; }
static boolean f2() { System.out.println( "function f2 called." ); return false; }
if ( false && f1() ) {} // f1不會被調(diào)用
if ( true || f2() ){} // f2不會被調(diào)用

由于&& 要求它的參與操作的兩個操作數(shù)都是布爾值真,才得真,所以只要得出其中一個為假,那么另一部分的表達(dá)式就不會被求值(在上面的例子中是f1()不會被調(diào) 用)
同理由于||要求它的參與操作的兩個操作數(shù)只要其中之一為真,就得真,所以只要得出其中一個為真,那么另一部分也不會被求值(在上面的例子中 是f2()不會被調(diào)用)

這就是邏輯操作符所謂的“短路求值”

位操作沒有這一特性,所以不管那邊的值是如 何,任何參與運(yùn)算的表達(dá)式都會被執(zhí)行求值,因此也就產(chǎn)生了你代碼之中的結(jié)果了。

 

 

 

 

 

 

 

 

 

 

三、Java中邏輯運(yùn)算短路的理解:

 

 

短路” 主要用于邏輯運(yùn)算符中,即 “ !   && || "這三種運(yùn)算符
短路 就是知如果左側(cè)的表達(dá)式能確定運(yùn)算后的結(jié)果,則不再計(jì)算右側(cè)的表達(dá)式。
如(1>2)&&(2<3)   明明左側(cè)已經(jīng)為假 了   ,我 不用計(jì)算右側(cè)我一定知道 此表達(dá)是為假,這樣 就好似物理中的電流,當(dāng)某處短路時,電流直接從一條路通過,而不再管另一條路。

看個例子:

public class Logic{
public static void main(String[] args){

int a = 1;
int b = 1;
if(a<b&&b<a++){
System.out.println(a>b&true);
System.out.println(a);
System.out.println("this's in my control");
}
else{
System.out.println("that's impossible");
System.out.println(a);
}

}
}

此處由于a<b為假 ,所以 后面的b<a++不會執(zhí)行
此處的結(jié)果為
that's impossible
1
若假設(shè)a的初值為0,此時a<b成立,這時就要計(jì)算后面的值了
結(jié)果應(yīng)該為和上面一樣。


網(wǎng)上看見有人對   && 與 & 有點(diǎn)混淆,順便說說我的理解
本來 & 是個 位運(yùn)算符
也就是主要用來 做二進(jìn)制運(yùn)算的,如 010101&101010 = 000000

但它的特別之處 在于 它可以 進(jìn)行 boolean值的運(yùn)算
就像我上面寫的   a>b&true

其實(shí)我想這追根究地 在于 boolean 在內(nèi)存中是用一位二進(jìn)制來表示的,故可以進(jìn)行位運(yùn)算
我們不能被表象所迷惑 ,認(rèn)為這是邏輯運(yùn)算 ,這樣理解就根本不存在討論短路的必要了。

 

 

 


                                    

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    国产内射在线激情一区| 在线观看视频日韩精品| 麻豆最新出品国产精品| 亚洲熟女一区二区三四区| 少妇高潮呻吟浪语91| 肥白女人日韩中文视频| 亚洲国产一区精品一区二区三区色| 黑鬼糟蹋少妇资源在线观看| 中国一区二区三区人妻| 精品午夜福利无人区乱码| 国产精品视频一区二区秋霞| 国产av大片一区二区三区| 欧美区一区二在线播放| 国内午夜精品视频在线观看| 99一级特黄色性生活片| 国产亚洲欧美一区二区| 国产又爽又猛又粗又色对黄| 亚洲国产av一二三区| 精品一区二区三区不卡少妇av| 欧美美女视频在线免费看| 中文字幕欧美视频二区| 欧美日韩亚洲精品在线观看| 久久精品免费视看国产成人| 日本熟女中文字幕一区| 国产一区二区三区丝袜不卡| 日本午夜一本久久久综合| 熟妇久久人妻中文字幕| 青青操在线视频精品视频| 九九久久精品久久久精品| 欧美韩国日本精品在线| 精产国品一二三区麻豆| 欧美一区二区口爆吞精| 激情五月天免费在线观看| 人妻久久一区二区三区精品99| 欧美三级不卡在线观线看| 亚洲国产性生活高潮免费视频| 九九热精彩视频在线播放| 午夜精品成年人免费视频| 91久久精品国产一区蜜臀| 91欧美日韩精品在线| 欧美一区二区三区播放|