public class yunsuanfu { public static void main(String[] args) { int a = 5; System.out.println("value is "+((a<5) ? 10.9 : 9)); } }
剛剛看到的一道面試題,第一眼看很簡單,就一個三元運算符,如果你覺得輸出的結果是9,那就中了這道題的陷阱了,注意下“((a<5) ? 10.9 : 9)”,里面有一個10.9,而后面跟了一個9,這是java就會根據運算符的精確度類型進行自動類型轉換,由於前面有一個10.9,所以后面的9會被轉換成9.0,所以輸出的是9.0.
再看看另外一個
char x='x'; int i =10; System.out.println(false ? i : x); System.out.println(false ? 10 : x); }
輸出的結果是
120
x
int i=10;中i是一個變量,所以第一個輸出x被強制轉換成int型了,應為i是int類型,x的值轉換成int值是120,所以第一個輸出120。
至於第二個輸出,java規范中提到,當后兩個表達式有一個是常量表達式(上面指10),另外一個類型是T(上面指char)時,而常量表達式可以被T表示時,輸出結果是T類型。
因為10是常量,可以被char表示,輸出的結果是char型的,所以是x。
是不是覺得有點坑~~~