&& 和 || 和 !屬於邏輯運算符號
& 和 | 和 ^ 屬於位操作符
一、&&和&的區別
1.1 相同點:
&和&&都可以用作邏輯與的運算符,表示邏輯與(and),當運算符兩邊的表達式的結果都為true時,整個運算結果才為true,否則,只要有一方為false,則結果為false。
1.2不同點:
1.2.1. &&還具有短路的功能,即如果第一個表達式為false,則不再計算第二個表達式。
例如,對於if(str != null && !str.equals(“”))表達式。
當str為null時,后面的表達式不會執行,所以不會出現NullPointerException
如果將&&改為&,則會拋出NullPointerException異常。
再比如,If(x==33 & ++y>0) y會增長,If(x==33 && ++y>0)不會增長
1.2.2.&作為為運算時,&是按位與操作,參加運算的兩個數據按照二進制位進行“與”運算。
如果兩個相應的二進制位都為1,那該位的結果值就是1,否則為0,即0&0=0,0&1=0,1&1=1,1&0=0。
比如:3&5並不等於8,應該按位與,00000011&00000001=00000001。
二、|| 和 | 的區別
2.1 相同點 :當二者表示或的時候,二者都true則true,只有一個為true的時則true。
2.2 不同點:
2.2.1 || 也存在短路的問題,當前者為true時,則不會判斷后面的表達(與上面的&&類似)
2.2.2 | 是按位或操作,參加運算的兩個數據按照二進制位進行“或”運算。
如果兩個相應的二進制位中只要有一個為1,則該位結果就是1,即為0|1=1、1|1=1、1|0=1、0|0=0。
||是邏輯或運算符,直接看意思,a||b,若a、b中有一個為真,則a||b結果為真。
三、~與!的區別
~是一個單目運算符,用來對一個二進制位按位取反,即0變成1,1變成0,比如~00001111=11110000。
!是邏輯非運算符,我們還是直接來看他的意思,!a的意思是:若a為真,則!為假,若a為假則!a為真。
[參考:https://blog.csdn.net/qq_36098284/article/details/80709301]
