为什么ArrayList.this.modCount与this.modCount不同

时间:2017-05-03 09:04:21

标签: java arraylist

在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级。这是我的错误。

1 个答案:

答案 0 :(得分:3)

我在size()中的任何ArrayList方法中都没有看到该代码,但我在ArrayList.SubList的{​​{1}}中看到了这种情况。

条件比较两个不同实例的checkForComodification()成员 - 一个是modCount实例,另一个是封闭的ArrayList.SubList实例(实例ArrayList是参考)。

ArrayList.thisSubList的内部类,因此ArrayList的每个实例都有一个对应的实例,如果SubList被称为封闭实例。

ArrayListArrayList都是ArrayList.SubList的直接子类,因此两者都从该类继承AbstractList成员,但有问题的代码会比较modCount 1}}两个不同实例的成员。