一尘不染

方法检查是否在if-check内部进行“测试”然后“恢复”?

java

我突然忘记了if-check内部方法调用的工作方式。

例:

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

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

通常,if-check内部的方法调用是否“已测试”,然后“还原”,所以主体中相同的方法调用等于if-check中的方法?


阅读 190

收藏
2020-12-03

共1个答案

一尘不染

答案取决于该next()方法的实现。例如,如果list为an,Iterator则每次调用都会next()使迭代器前进,因此代码中的两次调用将给出不同的结果(假设它们没有引发异常)。如果list是,也是如此Scanner。每次调用next()都会产生不同的输出。

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

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

2020-12-03