我正在查看包含以下内容的Java代码:
User rv = tmp != null && tmp.size() > 0 ? tmp.get(0) : null;
我对Java语法不是很强。我的解释是,rv = tmp
只要tmp
null
tmp
size
> 0
为null
,否则它等于{{1}} }。我是对的吗?
答案 0 :(得分:7)
这是这个表达的“解剖学”:
rv = // assignment of a conditional expression
(tmp != null && tmp.size() > 0) // condition
? tmp.get(0) // on true
: null; // on false
这是确保没有异常访问列表元素零的常用方法:条件确保tmp
不是null
,并且大小是一个或多个。
答案 1 :(得分: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 :(得分:2)
rv = ((tmp != null && tmp.size() > 0) ? tmp.get(0) : null);
如果内括号内的表达式返回true,则rv将保持值tmp.get(0),否则它将保持值null。
variable = expression ? a : b ;
类似于
if expression == true
variable = a;
else
variable =b ;
答案 3 :(得分: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;
三元声明并不快。虽然,在某些情况下,使用它会使您的代码更具可读性。