在ArrayList的源代码中,我发现了一些困惑的代码:
public int size() {
if (ArrayList.this.modCount != this.modCount)
throw new ConcurrentModificationException();
return this.size;
}
modCount继承自 AbstractList 。我找不到另一个modCount.So我认为 ArrayList.this.modCount 与 this.modCount 。但实际上, ArrayList.this.modCount!= this.modCount 可以是真的!
为什么同一个变量不等于自己?
=============================================== ======================
代码在SubList
级。这是我的错误。
答案 0 :(得分:3)
我在size()
中的任何ArrayList
方法中都没有看到该代码,但我在ArrayList.SubList
的{{1}}中看到了这种情况。
条件比较两个不同实例的checkForComodification()
成员 - 一个是modCount
实例,另一个是封闭的ArrayList.SubList
实例(实例ArrayList
是参考)。
ArrayList.this
是SubList
的内部类,因此ArrayList
的每个实例都有一个对应的实例,如果SubList
被称为封闭实例。
ArrayList
和ArrayList
都是ArrayList.SubList
的直接子类,因此两者都从该类继承AbstractList
成员,但有问题的代码会比较modCount
1}}两个不同实例的成员。