我期待在一段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;' –