2013-02-20 50 views
0

我知道,你可以在Java中使用這樣的:在Java中是否存在沒有else部分的高級if語句?

(a > b) ? a : b; 

有類似只是沒有別的什麼部位?

+0

..「else」部分是可選的,不是? – mre 2013-02-20 22:10:15

+3

如果表達式爲假,那麼值會是什麼? – 2013-02-20 22:11:15

+1

沒有'else'然後只是做'if(a> b)z = a'。我不明白你的意思。 – Shivam 2013-02-20 22:12:35

回答

10

這是一個表達式,而不是一個語句,這意味着它總是評估一些東西。如果沒有「其他部分」,那麼表達式就不會評估測試是否爲假。所以,不,沒有別的,沒有什麼類似的。

我喜歡使用conditional operator的事情是,你可以像

foo = a > b ? c : d; 

分配的東西,閱讀它,你知道富了分配給它的東西,不管測試是否是真實的。因此,它爲您提供了一種方法來指示取決於某個測試的值。

Groovy的有一些類似的操作符:

?:,Elvis操作符,分配值在右邊作爲缺省,如果左邊的表達式爲空。

?.,safe-null運算符,如果左側評估爲null,則評估爲null。這適用於你有一連串可能爲空的事情的情況,比如foo?.bar?.baz,如果某些內容爲空,但寧願不輸出所有空檢查,你寧願不用NPE炸燬。

+0

該死,打我24秒。 – Antimony 2013-02-20 22:13:30

3

不,沒有。這是沒有道理的。

?:是三元比較運算符 - 表達式。如果沒有其他語句,表達式的價值是什麼? C#有一個簡寫版本??,但這只是語法上的糖,Java沒有任何類似的東西。

+0

它被稱爲_ternary_操作符。 (對不起,由於六個字母的編輯限制,無法改進您的答案。) – nutlike 2013-02-20 22:19:59

+1

@nutlike:從技術上講,jls將其稱爲條件運算符。我不知道,直到我剛剛Google搜索它。 – 2013-02-20 22:28:59

+0

@Nathan Hughes:感謝您的評論(以及您答案中的鏈接) - 也不知道這一點。爲了完整起見:[Wikipedia](http://en.wikipedia.org/wiki/%3F :)。 – nutlike 2013-02-20 22:36:49

2

我猜你正在使用它來爲var分配一個值,我將其稱爲「c」,這個想法是你只想在if語句爲真時分配值。正常的方法是:

if(a > b) c = a; 

但是,如果你真的使用三元語法你可以寫:

c = a > b ? a : c; 

注意,三元括號是可選的,所以我忽略他們。