條件運算符 - 編程語言中的符號
條件運算符的優(yōu)先級高于賦值,逗號運算符,低于其他運算符。
C語言
運算符
表達式為:表達式1?表達式2:表達式3
先求解表達式1,
若其值為真(非0)則將表達式2的值作為整個表達式的取值,否則(表達式1的值為0)將表達式3的值作為整個表達式的取值。
例如:
1、max= - a>b?a:b
就是將a和b二者中較大的一個賦給max。
2、min= - a<b?a:b
就是將a和b二者中較小的一個賦給min。
優(yōu)先級
條件運算符優(yōu)先級高于賦值、逗號運算符,低于其他運算符
例如:
⑴m<n?x:a+3
等價于: - m<n? - x: - a+3
⑵a++>=10&b–>20?a:b
等價于: - a++>=10&b–>20?a:b
⑶x=3+a>5?100:200
等價于:x= - - 3+a>5?100:200
結(jié)合性
條件運算符具有右結(jié)合性
當(dāng)一個表達式中出現(xiàn)多個條件運算符時,應(yīng)該將位于最右邊的問號與離它最近的冒號配對,并按這一原則正確區(qū)分各條件運算符的運算對象。
例如:
w<x?x+w:x<y?x:y
與w<x?x+w: - x<y?x:y等價
與 - w<x?x+w:x<y?x:y不等價
JAVA語言
形式
關(guān)系表達式?表達式1:表達式2
求值規(guī)則
求解關(guān)系表達式,根據(jù)關(guān)系表達式的布爾值決定取值:關(guān)系表達式的值為true時取表達式1的值;關(guān)系表達式的值為false時取表達式2的值。
說明
1、條件運算符的優(yōu)先級低于關(guān)系運算符和算術(shù)運算符,高于賦值運算符。
2、JAVA中條件運算表達式中的關(guān)系表達式值的類型必須為布爾類型,只能是true或false。
3、結(jié)合性也是右結(jié)合性。
4、與C語言不同的是,JAVA中條件表達式的值必須參與運算。
publicclassdemo{
publicstaticvoidmain - String[]args{
inta=10,b=20,y;
a>b? - y=a: - y=b;//1,這樣寫是錯誤的
y=a>b?a:b;//2,這樣寫是正確的
y=a<b?b:b<c?a:c;//3,這樣寫是正確的
以上程序中,1處錯誤是由于條件表達式的值沒有參與運算,不能構(gòu)成語句。3處(b<c?a:c先結(jié)合,再將這個值參與到另一個條件運算中去,是合法的,這也說明了條件運算符的右結(jié)合性。
運算符妙用
——用條件表達式判斷輸出單詞的單復(fù)數(shù)。
程序示例:ChooseDemo05.java
程序中會自動根據(jù)apples的個數(shù)來輸出單詞的單數(shù)或復(fù)數(shù)。
publicclassChooseDemo05{
publicstaticvoidmain - String[]args{
intapples=1;//蘋果的個數(shù)
System.out.println - "Ihave"+apples+"apple"+ - apples==1?".":"s.";
當(dāng)然,還有其他的應(yīng)用:
1、在某些地方使用“他”還是“她”。
2、日期輸出時決定使用后綴“st”、“nd”等。
