这个表达式在Java中的含义是什么?

时间:2015-07-15 10:27:33

标签: java

我正在学习“The Java Tutorial”第6版。 我试过这个例子:

public int indexOf(E e) {
    for (ListIterator<E> it = listIterator(); it.hasNext(); )
        if(e == null ? it.next() == null : e.equals(it.net()))
            return it.previousIndex();
    return -1;
}

我的问题是:用于for循环的特定语法的确切含义是什么?并且,在if条件中它是什么意思“?”和“:”?

2 个答案:

答案 0 :(得分:1)

举个简单的例子,

minVal = (a < b) ? a : b;

在此代码中,如果变量a小于b,则为minVal分配值a;否则,minVal的值为b

你的案子

 if(e == null ? it.next() == null : e.equals(it.net()))

意思,

if e== null, 
   execute it.next() ==  null // compares and return true/false
else 
   execute e.equals(it.net()) // compares and return true/false

答案 1 :(得分:1)

for (initialization ; condition ; incrementation) { ... } 是一个正常的for循环语法。如果不需要,可以将增量部分留空。但要小心,因为它可能会导致无限循环。这就是你的循环的样子 - 没有增量部分。

e == null ? it.next() == null : e.equals(it.net())是一个简单的三元运算符: IF condition ? THEN : ELSE

重写它意味着这样的事情:

if(e == null) {
    return it.next == null 
}  else {
    return e.equals(it.net())
}

当它返回一个布尔值时,封闭的if()语句接受它作为条件。