N4PUY6OXYPY2O~A)R3X4N6I.png
首先來看兩個概念:
按位與:a&b是把a和b都轉換成二進制數然后再進行與的運算;
邏輯與:a&&b就是當且僅當兩個操作數均為 true時,其結果才為 true;只要有一個為零,a&&b就為零。
&和&&的區別
&和&&都可以用作邏輯與的運算符,表示邏輯與(and),當運算符兩邊的表達式的結果都為true時,整個運算結果才為true,否則,只要有一方為false,則結果為false。
&&還具有短路的功能,即如果第一個表達式為false,則不再計算第二個表達式。
&還可以用作按位與的運算符,兩個表達式的值按二進制位展開,對應的位(bit)按值進行“與”運算,結果保留在該位上
(1)短路功能測試:
public class AndTest {
public static void main(String[] args) {
String str=null;
if (str!=null&str.equals("")) {
System.out.println("true");
}
}
}
當為&,會報錯 java.lang.NullPointerException,即空指針錯誤;
當為&&,則不會報錯
(2)按位與:
運算規則:0&0=0; 0&1=0; 1&0=0; 1&1=1;
即:兩位同時為“1”,結果才為“1”,否則為0
例如:3&5 即 0000 0011 & 0000 0101 = 0000 0001 ;因此,3&5的值得1。
public class AndTest {
public static void main(String[] args) {
int a=3&5;
System.out.println("a="+a);
}
}
結果a=1.
|和||的區別
|和||的區別同理,都可以作為邏輯或運算符;
|還可以作為按位或的運算符,運算規則與按位與同理;
||同樣有類似短路的功能,即第一個條件若為true,則不計算后面的表達式。