對於布爾類型boolean,永遠只有true和false兩個值。
布爾運算是一種關系運算,包括以下幾類
- 比較運算符:
>
,>=
,<
,<=
,==
,!=
- 與運算
&&
- 或運算
||
- 非運算
!
示例
boolean isGreater=5>3;//true int age=12; boolean isZero = age == 0; // false boolean isNonZero = !isZero; // true boolean isAdult = age >= 18; // false boolean isTeenager = age >6 && age <18; // true
關系運算符的優先級從高到低依次是
!
>
,>=
,<
,<=
==
,!=
&&
||
短路運算
布爾運算的一個重要特點是短路運算。如果一個布爾運算的表達式能提前確定結果,則后續的計算不再執行,直接返回結果。
因為 false && x的結果總是false,無論x是true還是false,因此運算在確定第一個值為false后,不再繼續運算,而是直接返回false。
示例
public class Main { public static void main(String[] args) { boolean b=5<3; boolean result = b && (5/0>0); System.out.println(result); } }
如果沒有短路運算,&&
后面的表達式會由於除數為0
而報錯,但實際上該語句並未報錯,原因在於與運算是短路運算符,提前計算出了結果false
。
如果變量b
的值為true
,則表達式變為true && (5 / 0 > 0)
。因為無法進行短路運算,該表達式必定會由於除數為0
而報錯。
類似的,對於||
運算,只要能確定第一個值為true
,后續計算也不再進行,而是直接返回true
:
boolean result = true || (5/0>0);//true
三元運算符
Java還提供一個三元運算符b ? x : y
,它根據第一個布爾表達式的結果,分別返回后續兩個表達式之一的計算結果。示例:
public class Main { public static void main(String[] args) { int n=-100; int x=n>=0?n:-n; System.out.println(x); } }
上述語句的意思是,判斷n>=0是否成立,如果為true,則返回n,否則返回-n。這實際上是一個求絕對值的表達式。
注意到三元運算b ? x : y
會首先計算b
,如果b
為true
,則只計算x
,否則,只計算y
。此外,x
和y
的類型必須相同,因為返回值不是boolean
,而是x
和y
之一。
練習
判斷指定年齡是否小學生(6~12歲)
public class Main { public static void main(String[] args) { int age=7; boolean isPrimaryStudent=age >=6 && age<=12; System.out.println(isPrimaryStudent?"Yes":"No"); } }