三元運算符:
顧名思義,三元運算符需要三個操作數。
語法為:條件表達式?表達式1:表達式2。
說明:問號前面的位置是判斷的條件,判斷結果為bool型,為true時調用表達式1,為false時調用表達式2。
其邏輯為:“如果為真執行第一個,否則執行第二個。”
比如,java中基本類型 boolean的包裝類 Boolean中“.valueOf(boolean b)”方法的源碼定義:
public static Boolean volueOf (boolean b){ ruturn b ? Boolean.True:Boolean.False; }
解析:方法體中的表達式用到了三元運算符,對應於上面的說明,其中:
條件表達式:b
表達式1: Boolean.True
表達式2: Boolean.False
方法體中表達式整體意思:返回變量b的引用(這個引用指向一個Boolean類型的instance),這個引用的獲取需要經過三元運算符進行邏輯判斷,判斷過程如下:
當b的值為true時,返回Boolean.True
當b的值為false時,返回Boolean.False
ps:此處,True是Boolean類中的一個屬性,但是這個屬性本身的類型是類類型,且看其源碼——
public static final Boolean TRUE = new Boolean(true);
對應源碼中注釋:
/**
* The <code>Boolean</code> object corresponding to the primitive
* value <code>true</code>. (翻譯:布爾對象對應於原始值true)
*/
總結:三元運算符中的置於"?"前方的條件表達式(java中常稱作關系表達式)准確的說是布爾表達式,形式多種多樣,只要計算的結果是一個布爾量即可
補充下條件表達式資料:
條件表達式:條件表達式由條件運算符構成,並常用條件表達式構成一個賦值語句。條件運算符優先級高於賦值、逗號運算符,低於其他運算符。
口訣:前真后假
性質:右結合性
若有多個條件表達式像這樣連在一起:x=<表達式1>?<表達式2>:<表達式3>?<表達式4>:<表達式5>···執行順序是從右到左依次判斷再求出最后的x,即所謂的右結合性。
例如: a=1,b=2,c=3,d=4,則條件表達式a<b?a:c<d?c:d的值為:1