三目運算符----類型自動提升

今天偶然發現一問題,代碼如下:

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。

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