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

【Java 每日一題】三元運算子型別推導陷阱:20161020 題目詳解

     編輯:Java 綜合教學

題目程式碼

package Oct2016;
public class Ques1020 {
    public static void main(String[] args) {
        int num = 10;
        String str01 = String.valueOf(num < 30 ? 20 : 30);
        String str02 = String.valueOf(num < 30 ? 20 : 30.0);
        System.out.println("str01與str02是否相等:" + str01.equals(str02));
    }
}

輸出結果

str01與str02是否相等:false

深度解析

第一個三元運算式:num < 30 ? 20 : 30

  • 條件為真,結果為 20(int 常量)。
  • 整個運算式型別為 int(兩邊皆為 int)。
  • String.valueOf(int) 回傳 "20"。

第二個三元運算式:num < 30 ? 20 : 30.0

  • 條件為真,結果為 20,但編譯期型別推導基於兩分支:
  • 真分支:20 (int);假分支:30.0 (double)。
  • 根據 JLS 15.25,int 與 double 二元數值提升為 double。
  • 整個運算式編譯期型別為 double,執行期值為 20.0。
  • String.valueOf(double) 回傳 "20.0"。

比較結果

  • str01 = "20"
  • str02 = "20.0"
  • "20".equals("20.0") → false

核心知識點總結

  1. 三元運算式型別由兩分支決定,而非執行期實際值。即使條件為真,假分支型別仍參與型別推導。
  2. 基本型別數值提升規則:byte/short/char → int → long → float → double。
  3. String.valueOf 重載方法依編譯期靜態型別分派,int 與 double 產生不同字串表示。
  4. 實務建議:避免三元運算式兩分支型別不一致,或顯式轉型統一型別(如 (double) 20)。

Java每日一題二維碼

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