文章詳情頁
使用條件運算符的奇怪Java行為。是蟲子嗎?
瀏覽:132日期:2024-05-02 09:49:18
如何解決使用條件運算符的奇怪Java行為。是蟲子嗎??
盡管看起來好像一個,但這一點也不令人驚訝。該行為在JLS§15.25-條件運算符中指定:
否則,如果第二個和第三個操作數的類型可以轉換(第5.1.8節)為數字類型,則有幾種情況:
如果其中一個操作數的類型為byte或Byte,而另一個操作符的類型為short或Short,則條件表達式的類型為short。[…]
否則,將二進制數值提升(第5.6.2節)應用于操作數類型,請注意,二進制數值升級執行值集轉換(第5.1.13節),并且可能 (第5.1.8節)。
因此,Integer和Double類型作為二進制數值提升的過程被取消裝箱到它們各自的原始副本-int和double。然后,條件運算符的類型是intand的提升類型double,即double。因此結果是1.0。然后,當然會將最終結果裝箱到Double。
解決方法您能否運行以下內容并進行解釋?
Object o = true ? new Integer(1) : new Double(2.0);System.out.println(o);
我發現令人驚訝,因為有人期望打印1而不是1.0
標簽:
java
相關文章:
1. node.js - session怎么存到cookie,然后服務器重啟后還能獲取。數據庫不用mongodb或redis,數據庫是mysql2. android - 安卓做前端,PHP做后臺服務器 有什么需要注意的?3. mysql - 數據庫批量插入數據的速度是否與索引有關?4. 數據庫 - mysql中怎樣修改帶點的字段名的位置?5. mysql 5個left關鍵 然后再用搜索條件 幾千條數據就會卡,如何解決呢6. 統計 - MYSQL版本問題導致SQL語法錯誤!unknow column ’SQLSTR’7. 為什么我寫的PHP不行8. shell - mysql中update語句錯誤9. mysql - 查詢表里邊id為16的content然后,更新id大于16的content為查出來的content10. angular.js使用$resource服務把數據存入mongodb的問題。
排行榜
