class Logic{ ??? public ststic void main(String[] args){ ??????? int a=1; ??????? int b=1; ??????? if(a<b && b<a/0){ ??????????? System.out.println("Oh,That's Impossible!!!"); ??????? }else{ ??????????? System.out.println("That's in my control."); ??????? } ??? } } |
??? “&&”運(yùn)算符檢查第一個(gè)表達(dá)式是否返回“false”,如果是“false”則結(jié)果必為“false”,不再檢查其他內(nèi)容。
“a/0”是個(gè)明顯的錯(cuò)誤!但短路運(yùn)算“&&”先判斷“a<b”,返回“false”,遂造成短路,也就不進(jìn)行“a/0”操作了,程序會(huì)打出"That's in my control."。這個(gè)時(shí)候,交換一下“&&”左右兩邊的表達(dá)式,程序立即拋出異?!癹ava.lang.ArithmeticException: / by zero”。
class Logic{ |
??? “||”運(yùn)算符檢查第一個(gè)表達(dá)式是否返回“true”,如果是“true”則結(jié)果必為“true”,不再檢查其他內(nèi)容。
“a/0”是個(gè)明顯的錯(cuò)誤!但短路運(yùn)算“||”先執(zhí)行“a==b”判斷,返回“true”,遂造成短路,也就不進(jìn)行“a/0”操作了,程序會(huì)打出"That's in my control."。這個(gè)時(shí)候,交換一下“||”左右兩邊的表達(dá)式,程序立即拋出異?!癹ava.lang.ArithmeticException: / by zero”。
非短路運(yùn)算符包括 “& 與”、“| 或”、“^ 異或”,一般稱為“邏輯操作”
class Logic{ |
??? “&”運(yùn)算符不會(huì)造成短路,它會(huì)認(rèn)認(rèn)真真的檢查每一個(gè)表達(dá)式,雖然“a<b”已經(jīng)返回“flase”了,它還是會(huì)繼續(xù)檢查其他內(nèi)容,以至于最終拋出異常“java.lang.ArithmeticException: / by zero”。
????
class Logic{ ??? public ststic void main(String[] args){ ??????? int a=1; ??????? int b=1; ??????? if(a==b?| b<a/0){ ??????????? System.out.println("That's in my control."); ??????? }else{ ??????????? System.out.println("Oh,That's Impossible!!!"); ??????? } ??? } } |
??? 同理,“|”運(yùn)算符也不會(huì)造成短路,雖然“a==b”已經(jīng)返回“true”了,它還是會(huì)繼續(xù)檢查其他內(nèi)容,以至于最終拋出異?!癹ava.lang.ArithmeticException: / by zero”。
??? “^”運(yùn)算符道理是一樣的,就不在這里羅索了。
??? 最后。短路運(yùn)算符只能用于邏輯表達(dá)式內(nèi),非短路運(yùn)算符可用于位表達(dá)式和邏輯表達(dá)式內(nèi)。也可以說(shuō):短路運(yùn)算只能操作布爾型的,而非短路運(yùn)算不僅可以操作布爾型,而且可以操作數(shù)值型。
請(qǐng)注意!引用、轉(zhuǎn)貼本文應(yīng)注明原作者:Rosen Jiang 以及出處:http://www.tkk7.com/rosen