日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

JAVA中和、||和|的区别?

發布時間:2025/3/12 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JAVA中和、||和|的区别? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

問題一:JAVA中&&和&、||和|(短路與和邏輯與、短路或和邏輯或)的區別?

首先名稱是不同的

邏輯運算符:&&邏輯與  ||邏輯或  它們都是邏輯運算符

位運算符:& 按位與  | 按位或  它們都是位運算符

if(a==1&&b==2) 這是說既要滿足a=1也要滿足b=2

if(a==1||b==2) 這是說或者滿足a=1或者要滿足b=2

&&可以用作邏輯與的運算符,表示邏輯與(and),當運算符兩邊的表達式的結果都為true時,整個運算結果才為true,否則,只要有一方為false,則結果為false。

&&還具有短路的功能,即如果第一個表達式為false,則不再計算第二個表達式,例如,對于if(str != null && !str.equals(“”))表達式,當str為null時,后面的表達式不會執行,所以不會出現NullPointerException;

||可以作邏輯或運算符,表示邏輯或(or),當運算符有一邊為true時,整個運算結果為true!當第一個表達式為true時,不再計算第二個表達式;

而a&b或者a|b則是二進制的與或運算

&同為1時為1,否則為0

|同為0時為0,否則為1

3&5則

0011

&0101

0001

等于1

3|5則

0011

|0101

0111

等于7

&&邏輯與 也叫做短路與 因為只要當前項為假,它就不往后判斷了,直接認為表達式為假

||邏輯或 也叫做短路或 因為只要當前項為真,它也不往后判斷了,直接認為表達式為真

問題二:關于Java 中邏輯運算與位運算的區別(具體到解一道題)

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

程序如下圖:

運行結果如下:

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

回答:

邏輯運算符執行的是短路求值
所謂短路,就是當參與運算的一個操作數已經足以推斷出這個表達式的值的時候,另外一個操作數(有可能是表達式)就不會 執行

比如:
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不會被調用
if ( true || f2() ){} // f2不會被調用

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

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

位操作沒有這一特性,所以不管那邊的值是如 何,任何參與運算的表達式都會被執行求值,因此也就產生了你代碼之中的結果了。

三、Java中邏輯運算短路的理解:

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

看個例子:

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++不會執行
此處的結果為

that's impossible 1

若假設a的初值為0,此時a<b成立,這時就要計算后面的值了
結果應該為和上面一樣。

網上看見有人對 && 與 & 有點混淆,順便說說我的理解
本來 & 是個 位運算符
也就是主要用來 做二進制運算的,如 010101&101010 = 000000

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

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

總結

以上是生活随笔為你收集整理的JAVA中和、||和|的区别?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。