在使用三目運算符的時候,我們經常見到的是:
x ? x : y
就是if else的簡寫
如果x為真,就返回x,如果x為假,就返回y。這是最簡單最基本的用法。
但是有時候會看到這種用法
x ?: y
?與:之間沒有任何操作數或表達式,這是什么用法呢?
在通過幾個實例的實驗后,猜測?與:之間省略了x
也就是說x ? : y 就是 x ? x : y
這樣就可以講的通了。
那么形如 a > b ?: b 中間省略了什么呢,是a嗎
驗證之后發現並不是a
其實省略了 a > b
也就是說 a > b ?: b 等價於 a > b ? a > b : b
那么可以這樣下結論:“?:” 中間省略的東東是與 “?”之前的數或者表達式完全一致。
值得注意的是:在某種情況下,還是會有出入的
譬如 y = ++x ? ++x : 3 與 y = ++x ?: 3
輸出的y的結果是不一樣的,這是為什么呢?
當x的初始值為0時,第一種寫法的輸出y的結果為2 ,而第二種寫法的輸出y的結果為1
說明第一種寫法輸出的是執行了兩次++操作的結果,而第二種寫法只執行了一次++操作
所以當有++或--運算的時候,要根據需要判斷要不要省略,不能貿然省去,從而引起不必要的錯誤
其實這種省略方式還是挺好的,特別是代碼長度比較長的時候,可以在滿足要求的前提下簡化代碼
感謝:http://blog.csdn.net/road_dongliang/article/details/48134993
