我突然忘记了if-check内部方法调用的工作方式。
例:
if (list.next() instanceof AClass) { AClass thing = list.next(); }
仍然在此示例中,如果next()迭代到列表中的下一个对象,则两个项目是否由list.next()同一对象返回?
next()
list.next()
通常,if-check内部的方法调用是否“已测试”,然后“还原”,所以主体中相同的方法调用等于if-check中的方法?
答案取决于该next()方法的实现。例如,如果list为an,Iterator则每次调用都会next()使迭代器前进,因此代码中的两次调用将给出不同的结果(假设它们没有引发异常)。如果list是,也是如此Scanner。每次调用next()都会产生不同的输出。
list
Iterator
Scanner
另一方面,如果该next()方法仅返回list实例的某些属性并且不更改其状态,则对其的多次调用将提供相同的输出。
通常,称为的方法会next()更改调用它们的对象的状态,但这只是编码约定。