1

我正在查看一段 Java 代码,其中包含:

User rv = tmp != null && tmp.size() > 0 ? tmp.get(0) : null;

我对 Java 语法不是很擅长。我的解释是,rv = tmp只要tmpnull tmpsize就是> 0,否则就等于null。我对么?

4

4 回答 4

7

这是这个表达式的“解剖”:

rv =                                // assignment of a conditional expression
    (tmp != null && tmp.size() > 0) // condition
?   tmp.get(0)                      // on true
:   null;                           // on false

这是确保访问列表的元素零不会出现异常的常用方法:条件确保tmpis not null,并且大小是一个或多个。

于 2013-10-23T02:14:09.350 回答
3

这是一个三元条件表达式

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;
 }
于 2013-10-23T02:15:01.997 回答
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 ;
于 2013-10-23T02:16:40.853 回答
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;

三元语句并不快。尽管在某些情况下,使用它会使您的代码更具可读性。

于 2013-10-23T02:18:55.427 回答