簡體   English   中英

使用條件運算符的奇怪java行為。 這是一個錯誤嗎?

[英]Strange java behaviour with conditional operator. Is it a bug?

你可以在下面運行並解釋一下嗎?

Object o = true ? new Integer(1) : new Double(2.0);
System.out.println(o);

我發現這令人驚訝,因為有人會期望1打印而不是1.0

這根本不是一個驚喜,雖然看起來像是一個。 行為在JLS§15.25中指定- 條件運算符

否則,如果第二個和第三個操作數具有可轉換的類型(第5.1.8節)到數字類型,則有幾種情況:

  • 如果其中一個操作數的類型為byteByte ,另一個操作數的類型為shortShort ,則條件表達式的類型為short

    [...]

  • 否則,二進制數字提升(第5.6.2節)將應用於操作數類型, 條件表達式的類型是第二個和第三個操作數的提升類型。

請注意,二進制數字提升執行值集轉換(第5.1.13節),並可執行拆箱轉換 (第5.1.8節)。

因此, IntegerDouble類型被拆箱到它們各自的原始對應物 - intdouble ,作為二進制數字提升的過程。 然后條件運算符的類型是intdouble的提升類型,它是double 因此結果是1.0 當然最終的結果會被裝回Double

這是昨天發表在DZone上的一篇文章:

Java自動拆箱問題

有趣的是,示例代碼看起來很相似......

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM