Java開發(fā)高質(zhì)量代碼建議1:三元操作符的類型務(wù)必一致
在Java開發(fā)中,三元操作符是 if-else 的簡化寫法,在項目中使用它的地方很多,也非常好用,但是好用又簡單的東西并不表示就可以隨便用,如下代碼:
運(yùn)行結(jié)果如下:

結(jié)果分析:
i是90,肯定小于200,兩者返回的值肯定都是99,但是這個99是有區(qū)別的:
s 是 執(zhí)行三元判斷,返回整型的 99,然后再轉(zhuǎn)String,實(shí)際為字符串類型的“99”
s1 是執(zhí)行三元判斷后,返回浮點(diǎn)型的 99.0,然后再轉(zhuǎn)String,實(shí)際為字符串類型的“99.0”

在101 和 101.0 這兩個數(shù)字中,在變量 s 中,三元操作符中的第一個操作數(shù)(99)和第二個操作數(shù)(101)都是 int 類型,類型相同,返回的結(jié)果也就是 int 類型的 99
而變量 s1 的情況就有點(diǎn)不同了,第一個操作數(shù)是 99(int 類型),第二個操作數(shù)卻是 101.0,而這是個浮點(diǎn)數(shù),也就是說兩個操作數(shù)的類型不一致,可三元操作符必須要返回一個數(shù)據(jù),而且類型要確定,不可能條件為真時返回 int 類型,條件為假時返回 float 類型。編譯器是不允許如此的,所以它就會進(jìn)行類型轉(zhuǎn)換了,int 型轉(zhuǎn)換為浮點(diǎn)數(shù) 99.0,也就是說三元操作符的返回值是浮點(diǎn)數(shù) 99.0,那這當(dāng)然與整型的 99 不相等了。
為什么是整型轉(zhuǎn)為浮點(diǎn),而不是浮點(diǎn)轉(zhuǎn)為整型呢?
這就涉及三元操作符類型的轉(zhuǎn)換規(guī)則:
若兩個操作數(shù)不可轉(zhuǎn)換,則不做轉(zhuǎn)換,返回值為 Object 類型。
若兩個操作數(shù)是明確類型的表達(dá)式(比如變量),則按照正常的二進(jìn)制數(shù)字來轉(zhuǎn)換,int 類型轉(zhuǎn)換為 long 類型,long 類型轉(zhuǎn)換為 float 類型等。
若兩個操作數(shù)中有一個是數(shù)字 S,另外一個是表達(dá)式,且其類型標(biāo)示為 T,那么,若數(shù)字 S 在 T 的范圍內(nèi),則轉(zhuǎn)換為 T 類型;若 S 超出了T 類型的范圍,則 T 轉(zhuǎn)換為 S 類型。
若兩個操作數(shù)都是直接量數(shù)字(Literal [1] ,則返回值類型為范圍較大者。
結(jié)論:
保證三元操作符中的兩個操作數(shù)類型一致,即可減少可能錯誤的發(fā)生。