首先來(lái)看兩個(gè)概念:
按位與:a&b是把a(bǔ)和b都轉(zhuǎn)換成二進(jìn)制數(shù)然后再進(jìn)行與的運(yùn)算;
邏輯與:a&&b就是當(dāng)且僅當(dāng)兩個(gè)操作數(shù)均為 true時(shí)系奉,其結(jié)果才為 true檬贰;只要有一個(gè)為零,a&&b就為零缺亮。
&和&&的區(qū)別
&和&&都可以用作邏輯與的運(yùn)算符翁涤,表示邏輯與(and),當(dāng)運(yùn)算符兩邊的表達(dá)式的結(jié)果都為true時(shí),整個(gè)運(yùn)算結(jié)果才為true葵礼,否則号阿,只要有一方為false,則結(jié)果為false鸳粉。
&&還具有短路的功能扔涧,即如果第一個(gè)表達(dá)式為false,則不再計(jì)算第二個(gè)表達(dá)式赁严。
&還可以用作按位與的運(yùn)算符扰柠,兩個(gè)表達(dá)式的值按二進(jìn)制位展開(kāi),對(duì)應(yīng)的位(bit)按值進(jìn)行“與”運(yùn)算疼约,結(jié)果保留在該位上
(1)短路功能測(cè)試:
public class AndTest {
public static void main(String[] args) {
String str=null;
if (str!=null&str.equals("")) {
System.out.println("true");
}
}
}
當(dāng)為&卤档,會(huì)報(bào)錯(cuò) java.lang.NullPointerException,即空指針錯(cuò)誤程剥;
當(dāng)為&&劝枣,則不會(huì)報(bào)錯(cuò)
(2)按位與:
運(yùn)算規(guī)則:0&0=0; 0&1=0; 1&0=0; 1&1=1;
即:兩位同時(shí)為“1”葱峡,結(jié)果才為“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);
}
}
結(jié)果a=1.
|和||的區(qū)別
|和||的區(qū)別同理稳诚,都可以作為邏輯或運(yùn)算符;
|還可以作為按位或的運(yùn)算符瀑踢,運(yùn)算規(guī)則與按位與同理扳还;
||同樣有類(lèi)似短路的功能,即第一個(gè)條件若為true橱夭,則不計(jì)算后面的表達(dá)式氨距。