1. 程式人生 > >三元運算子 比較三個數大小 三元操作符的型別務必一致

三元運算子 比較三個數大小 三元操作符的型別務必一致

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不相等了。