前言:
之前工作上在使用邏輯運算子判斷時,程式亂跑跑到跟我想的完全不一樣,後來開 debug 看才知道,原來是我自己的觀念不夠清楚。哈~因為自己的觀念不清楚導致 bug 產生,其實程式碼是不會錯的,會錯的是通常自己的思考邏輯寫錯。因此才會想說稍微複習一下,寫出這篇來提醒自己...
邏輯運算子
邏輯運算子
|
說明
|
範例
|
特性
|
&
|
AND
|
x & y
|
AND的特性只要1個運算元為 False,整個式子就為 False
運算時應該要同時拿2個運算元的資料來作運算。
|
|
|
OR
|
x | y
|
OR的特性只要1個運算元為True,整個式子就為 True
運算時應該要同時拿2個運算元的資料來作運算。
|
!
|
NOT
|
! a
|
如果條件為 True,則得到為 False。
|
&&
(短路型)
|
AND
|
x && y
|
AND的特性只要1個運算元為False,整個式子就為 False
假如第一個運算元的資料已經為False,就不會再判別第二個運算元資料,直接輸出False。
|
||
(短路型)
|
OR
|
x || y
|
OR的特性只要1個運算元為True,整個式子就為 True
假如第一個運算元的資料已經為True,就不會再判別第二個運算元資料,直接輸出 True。
|
程式碼(一):
package pkg; public class Test { public static void main(String[] args) { try { int x = 0; int y = 3; if ((x != 0) & (y / x < 5)) { System.out.println("False - 跳離!"); } else { System.out.println("x = " + x + " ; y = " + y); } } catch (Exception e) { e.printStackTrace(); } } }
首先看到程式碼第九行使用的邏輯運算子,因為 &(AND) 運算符號會同時運算左右的2個運算元,所以當第十行執行到(y / x < 5)有錯誤時,會直接跳出,並在 catch 中印出錯誤訊息!
程式碼(一)執行會遇到除以0的錯誤!如下:
若將程式碼(一)的&改為&&,程式碼(二)如下:
package pkg; public class Test { public static void main(String[] args) { try { int x = 0; int y = 3; if ((x != 0) && (y / x < 5)) { System.out.println("False - 跳離!"); } else { System.out.println("x = " + x + " ; y = " + y); } } catch (Exception e) { e.printStackTrace(); } } }
程式碼(二)這時並不會遇到除以0的錯誤,因為 && (Short-circuit AND) 在判別完第一個運算元
為False的時候,它就已經直接輸出False了!
程式碼(二),則得到的結果為:
沒有留言:
張貼留言