我正在查看一段 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
is not null
,并且大小是一个或多个。
这是一个三元条件表达式:
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) 否则它将保存值 null。
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;
三元语句并不快。尽管在某些情况下,使用它会使您的代码更具可读性。