方法调用内部if-checks“测试”然后“恢复”?

时间:2016-03-28 13:09:34

标签: java if-statement methods

我突然忘记if-check内部的方法调用是如何工作的。

示例:

if (list.next() instanceof AClass) {
    AClass thing = list.next();
}

仍然在这个例子中,如果next()迭代到列表中的下一个对象,那么这两个项是否由list.next()返回同一个对象?

一般来说,方法是否在if-checks内部调用“tests”然后“reverted”,所以在body中相同的方法调用与if-check中的方法调用相同?

2 个答案:

答案 0 :(得分:2)

答案取决于next()方法的实施。例如,如果listIterator,则每次调用next()都会使迭代器前进,因此代码中的两个调用会产生不同的结果(假设它们不会抛出异常) )。如果listScanner,情况也是如此。每次调用next()都会产生不同的输出。

另一方面,如果next()方法只返回list实例的某些属性并且不更改其状态,则多次调用它将提供相同的输出。

通常,名为next()的方法会更改调用它们的对象的状态,但这只是一种编码约定。

答案 1 :(得分:0)

如果listIterator,您可能需要以下内容:

AClass thing = null;
Object n = list.next();
if (n instanceof AClass) {
     thing = (AClass) n;
}

只需拨打.next()一次。两个后续调用将返回两个对象,因为内部位置在每个.next()调用上向前移动一步。没有任何“回归”发生。