首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> J2SE

J2SE 核心技術:條件運算子的型別陷阱 (上)

     編輯:J2SE

案例背景與問題引入

條件運算子(Conditional Operator),又稱三元運算子,語法為 boolean-exp ? exp1 : exp2。它先計算布林表達式,為 true 取 exp1 值,否則取 exp2 值。例如:

int k = (2 > 3) ? 23 : 45; // k = 45

確定運算「值」很直觀,但運算「結果的型別」如何決定?這往往被忽視,卻是 Bug 溫床。請看以下程式碼:

程式碼片段 (1)

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

程式碼片段 (2)

/* 假設 Test 為已定義類別 */
Test t = false ? new Object() : new Test();

這兩段程式碼分別會輸出什麼?為何會發生編譯錯誤?詳細分析請見下篇「深入解析條件運算子的型別推導陷阱 (下)」。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved