三元運算子 比較三個數大小 三元操作符的型別務必一致
阿新 • • 發佈:2019-02-20
class JavaApplication1
{
public static void main(String[] args)
{
int x = 10,y;
int a=10,b=20,c=30,z;
y=(a>b?a:b)>(b>c?b:c)?(a>b?a:b):(b>c?b:c);
System.out.println("y="+y);
}
}
一、分析
當你使用三元運算子,兩邊的運算元的型別不一致的時候,這就涉及到三元操作符的轉換規則:
1.若果兩個運算元不可轉換,則不做轉換,返回值為Object型別。
2.若兩個運算元是明確型別的表示式(比如變數),則按照正常的二進位制數字來轉換。int型別轉換為long型別,long型別轉換成float型別。
3.若兩個運算元中有一個是數字S,另外一個是表示式,且其型別為T,那麼,若數字S在T的範圍內,則轉換為T型別;若S超過了T的範圍,則T轉換為S型別。
4.若兩個運算元字都是直接數字。則返回值型別為範圍較大者。
二、場景
?1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
public
class Client{
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.equals(s1)):
}
}
public
class Client{
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.equals(s1)): }
}
|
分析,兩個三元操運算,條件都為真,返回第一個值,結果“兩者相等:true”。結果果真如此嗎?結果“兩者相等:false”!
問題出在於100和100.0這兩個數字上:
在變數s中,第一個運算元(90)和第二個運算元(100)都是int型別,型別相同,返回的是int型的90;
在變數s1中,第一個運算元型別為(90)int型別,第二個運算元是(100.0)浮點型。
可是三元操作符必須返回同一個資料,而且型別要確定,不可能條件為真返回int型別,條件為假返回float型別,編譯器是不會允許的,所以進行型別轉換了。int轉換成90.0,也就是所返回值是90.0當然和90不相等了。