java三元運算符與類型強制轉換


public class yunsuanfu {
    public static void main(String[] args) {
        int a = 5;
        System.out.println("value is "+((a<5) ? 10.9 : 9));
    }
}

剛剛看到的一道面試題,第一眼看很簡單,就一個三元運算符,如果你覺得輸出的結果是9,那就中了這道題的陷阱了,注意下“((a<5) ? 10.9 : 9)”,里面有一個10.9,而后面跟了一個9,這是java就會根據運算符的精確度類型進行自動類型轉換,由於前面有一個10.9,所以后面的9會被轉換成9.0,所以輸出的是9.0.

再看看另外一個

    char x='x';
    int i =10;
    System.out.println(false ? i : x);
    System.out.println(false ? 10 : x);
    }

輸出的結果是

120
x

int i=10;中i是一個變量,所以第一個輸出x被強制轉換成int型了,應為i是int類型,x的值轉換成int值是120,所以第一個輸出120。

至於第二個輸出,java規范中提到,當后兩個表達式有一個是常量表達式(上面指10),另外一個類型是T(上面指char)時,而常量表達式可以被T表示時,輸出結果是T類型。

因為10是常量,可以被char表示,輸出的結果是char型的,所以是x。

是不是覺得有點坑~~~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM