條件運算子(Conditional Operator),又稱三元運算子,語法為 boolean-exp ? exp1 : exp2。它先計算布林表達式,為 true 取 exp1 值,否則取 exp2 值。例如:
int k = (2 > 3) ? 23 : 45; // k = 45
確定運算「值」很直觀,但運算「結果的型別」如何決定?這往往被忽視,卻是 Bug 溫床。請看以下程式碼:
char x = 'A'; // line 1
int i = 0; // line 2
System.out.println(true ? x : 0); // line 3
System.out.println(true ? x : 1111111110); // line 4
System.out.println(false ? i : x); // line 5
/* 假設 Test 為已定義類別 */
Test t = false ? new Object() : new Test();
這兩段程式碼分別會輸出什麼?為何會發生編譯錯誤?詳細分析請見下篇「深入解析條件運算子的型別推導陷阱 (下)」。