java--三目運算子 型別自動提升
阿新 • • 發佈:2018-12-31
public static void main(String[] args) {
int i=99;
System.out.println("99999判斷結果:"+(true?'a':99999));
System.out.println("-1判斷結果 :"+(true?'a':-1));
System.out.println("0判斷結果 :"+(true?'a':0));
System.out.println("65535判斷結果:"+(true?'a':65535));
System.out .println("65536判斷結果:"+(true?'a':65536));
System.out.println("i判斷結果 :"+(true?'a':i));
}
99999判斷結果:97
-1判斷結果 :97
0判斷結果 :a
65535判斷結果:a
65536判斷結果:97
i判斷結果 :97
總結出了以下的結論:
(1)假如表示式1和表示式2具有相同的型別,那麼整個條件運算子結果的型別就是這個型別。
(2)假如一個表示式的型別是T,T是byte或short或char,另一個表示式的型別是int型別的常量表達式,而且這個常量表達式的值是可以用型別T表示的(也就是說,常量表達式的值是在型別T的取值範圍之內),那麼整個條件運算子結果的型別就是T。
(3)除以上情況外,假如表示式1和表示式2的型別不同,那麼將進行型別提升,整個條件運算子結果的型別就是提升後的型別
根據上述結論可以看出,參考結論(2)char型別的取值範圍為0-65535,在char取值範圍中均會返回char型別的值,所以輸出a。-1和65536超出了char的取值範圍,所以型別提升為int型,輸出a對應的ascii碼。最後一條判斷,已經明確了i為int型別,所以根據結論三,型別提升,輸出結果97。