一、分析
當你使用三元運算符,兩邊的操作數的類型不一致的時候,這就涉及到三元操作符的轉換規則:
- 若果兩個操作數不可轉換,則不做轉換,返回值為Object類型。
- 若兩個操作數是明確類型的表達式(比如變量),則按照正常的二進制數字來轉換。int類型轉換為long類型,long類型轉換成float類型。
- 若兩個操作數中有一個是數字S,另外一個是表達式,且其類型為T,那么,若數字S在T的范圍內,則轉換為T類型;若S超過了T的范圍,則T轉換為S類型。
- 若兩個操作數字都是直接數字。則返回值類型為范圍較大者。
二、場景
Example.png
分析,兩個三元操運算,條件都為真,返回第一個值,結果“兩者是否相等:true”。結果果真如此嗎?結果“兩者是否相等:false”!
問題出在于100和100.0這兩個數字上:
在變量s中,第一個操作數(90)和第二個操作數(100)都是int類型,類型相同,返回的是int型的90;
在變量s1中,第一個操作數類型為(90)int類型,第二個操作數是(100.0)浮點型。
可是三元操作符必須返回同一個數據,而且類型要確定,不可能條件為真返回int類型,條件為假返回float類型,編譯器是不會允許的,所以進行類型轉換了。int轉換成90.0,也就是所返回值是90.0當然和90不相等了。
三、建議
保證三元操作符中的兩個操作類型一致,即可減少錯誤的發生。