2013-10-23 67 views
1

我期待在一段Java代碼包含:解釋Java語法

User rv = tmp != null && tmp.size() > 0 ? tmp.get(0) : null; 

我不是很強大的Java語法。我的解釋是,rv = tmp只要tmpnulltmpsize> 0,否則它等於null。我對麼?

+3

這是你可以測試找出你自己的東西。 –

+1

也許如果我寫了這個,我會使用括號使初級程序員更容易理解'User rv =(tmp!= null && tmp.size()> 0)? tmp.get(0):null;' –

回答

7

下面是這個表達式的「解剖」:

rv =        // assignment of a conditional expression 
    (tmp != null && tmp.size() > 0) // condition 
? tmp.get(0)      // on true 
: null;       // on false 

這是確保不會有例外訪問列表中的零元素的常用方法:在條件保證了tmpnull,並且尺寸是一個或多個。

+0

請注意,代碼幾乎難以辨認,並且至少需要括號。 – chrylis

+0

有關java中三元運算符的更多背景信息,請單擊[此處(維基百科文章)](http://en.wikipedia.org/wiki/%3F:#Java)和[here(java tutorial)](http:/ /docs.oracle.com/javase/tutorial/java/nutsandbolts/op2.html) –

3

這是一個ternary conditional expression

expr ? value-if-true : value-if-false 

如果expr是真實的,它的計算結果value-if-true,否則它的計算結果value-if-valuse

因此,在這種情況下,它等同於:

if (tmp != null && tmp.size() > 0) { 
    rv = tmp.get(0); 
} else { 
     rv = null; 
} 
2
rv = ((tmp != null && tmp.size() > 0) ? tmp.get(0) : null); 

如果內部括號內表達式返回true,那麼RV將持有的價值tmp.get(0)否則將持有的價值空值。

variable = expression ? a : b ; 

類似於

if expression == true 
    variable = a; 
else 
    variable =b ; 
0

這就是所謂的ternary statement

基本上,

User rv = tmp != null && tmp.size() > 0 ? tmp.get(0) : null; 

是寫作的一個較短的方式:

 User rv; 

     if (tmp != null && tmp.size() > 0) 
      rv = tmp.get(0); 
     else 
      rv = null; 

三元說法是不是更快。儘管在某些情況下使用它可以讓你的代碼更具可讀性。

+0

_在某些情況下,使用它可以使你的代碼更具可讀性._ - 不是在這種情況下(儘管如果它有括號的話會更好) –