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

Java 三元運算符 (?:) 完全指南:語法、嵌套、優先級與最佳實踐

     編輯:Java 相關知識

語法

condition ? expressionIfTrue : expressionIfFalse
  • condition:boolean 表達式。
  • expressionIfTrue/False:**類型必須兼容** (可賦值給同一目標類型),三元表達式整體有類型。
  • **右結合性**:a ? b : c ? d : e 等價於 a ? b : (c ? d : e)。

基本用法

int score = 85;
String level = score >= 90 ? "優秀" : score >= 60 ? "及格" : "不及格";
// 等價於
String level = score >= 90 ? "優秀" : (score >= 60 ? "及格" : "不及格");

類型規則 (關鍵考點)

情況結果類型示例
兩邊同類型該類型int ? 1 : 2 → int
一邊基本類型,一邊包裝類基本類型 (自動拆箱)true ? 1 : Integer.valueOf(2) → int (NPE 風險!)
兩邊不同基本類型高精度類型 (二元數值提升)true ? 1 : 2.0 → double
兩邊引用類型公共父類/接口true ? "s" : new StringBuilder() → Serializable
一邊 null另一邊類型true ? "s" : null → String

優先級陷阱

// 錯誤:+ 優先級高於 ?:
int x = 10;
String s = "值:" + x > 5 ? "大" : "小"; // 編譯錯誤:String + int → String,無法比較 > 5
// 正確:加括號
String s = "值:" + (x > 5 ? "大" : "小");

口訣:三元運算符優先級**極低**,僅高於賦值運算符,混合運算**務必加括號**。

嵌套與可讀性

  • **最多兩層**,超過請改用 if-else 或 switch。
  • **換行縮進** 增強可讀:
    String result = condition1 ? value1
                     : condition2 ? value2
                     : condition3 ? value3
                     : defaultValue;
  • **避免副作用**:分支中不要放修改狀態的代碼,保持純表達式。

進階技巧

  • 空值合併:val != null ? val : defaultVal (Java 8+ 可用 Optional.ofNullable(val).orElse(defaultVal))。
  • 懶惰求值:僅計算被選分支,expensive() ? a : b 不會執行 b。
  • 編譯器優化:簡單三元常編譯為 if-else 字節碼,無性能差異。

總結

三元運算符是「單行 if-else」,用於**簡單、純、類型兼容**的值選擇。複雜邏輯請用 if-else,**可讀性第一**。

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