2013-10-23 73 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

_在某些情况下,使用它可以使你的代码更具可读性._ - 不是在这种情况下(尽管如果它有括号的话会更好) –