三元操作符的類型誤區

    public static void main(String[] args) {
        int i = 80;
        String s = String.valueOf(i < 100 ? 90 : 100);
        String s1 = String.valueOf(i < 100 ? 90 : 100.0);
        System.out.println(s);
        System.out.println(s1);
        System.out.println("兩者是否相等:" + s.equals(s1));
    }

以上執行結果爲:

90

90.0

兩者是否相等:false


爲什麼呢,三元操作符類型自動轉換了!

轉換規則:

若兩個操作數不可轉換,則不做轉換,返回值爲Object類型。
若兩個操作數是明確類型的表達式(比如變量),則按照正常的二進制數字來轉換,int類型轉換爲long類型,long類型轉換爲float類型等。
若兩個操作數中有一個是數字S,另外一個是表達式,且其類型標示爲T,那麼,若數字S在T的範圍內,則轉換爲T類型;若S超出了T類型的範圍,則T轉換爲S類型(可以參考《編寫高質量代碼:改善Java程序的151個建議》“建議22”,會對該問題進行展開描述)。
若兩個操作數都是直接量數字(Literal),則返回值類型爲範圍較大者。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章