我期待在一段Java代碼包含:解釋Java語法
User rv = tmp != null && tmp.size() > 0 ? tmp.get(0) : null;
我不是很強大的Java語法。我的解釋是,rv = tmp
只要tmp
是null
tmp
的size
是> 0
,否則它等於null
。我對麼?
我期待在一段Java代碼包含:解釋Java語法
User rv = tmp != null && tmp.size() > 0 ? tmp.get(0) : null;
我不是很強大的Java語法。我的解釋是,rv = tmp
只要tmp
是null
tmp
的size
是> 0
,否則它等於null
。我對麼?
下面是這個表達式的「解剖」:
rv = // assignment of a conditional expression
(tmp != null && tmp.size() > 0) // condition
? tmp.get(0) // on true
: null; // on false
這是確保不會有例外訪問列表中的零元素的常用方法:在條件保證了tmp
不null
,並且尺寸是一個或多個。
請注意,代碼幾乎難以辨認,並且至少需要括號。 – chrylis
有關java中三元運算符的更多背景信息,請單擊[此處(維基百科文章)](http://en.wikipedia.org/wiki/%3F:#Java)和[here(java tutorial)](http:/ /docs.oracle.com/javase/tutorial/java/nutsandbolts/op2.html) –
這是一個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;
}
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 ;
這就是所謂的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;
三元說法是不是更快。儘管在某些情況下使用它可以讓你的代碼更具可讀性。
_在某些情況下,使用它可以使你的代碼更具可讀性._ - 不是在這種情況下(儘管如果它有括號的話會更好) –
這是你可以測試找出你自己的東西。 –
也許如果我寫了這個,我會使用括號使初級程序員更容易理解'User rv =(tmp!= null && tmp.size()> 0)? tmp.get(0):null;' –