例如,在 JDK17 中阅读 ArrayList 类的 OpenJDK 代码时
(https://github.com/openjdk/jdk17/blob/master/src/java.base/share/classes/java/util/ArrayList.java)
我偶然发现了以下构造函数:
public ArrayList(Collection<? extends E> c) {
Object[] a = c.toArray();
if ((size = a.length) != 0) {
if (c.getClass() == ArrayList.class) {
elementData = a;
} else {
elementData = Arrays.copyOf(a, size, Object[].class);
}
} else {
// replace with empty array.
elementData = EMPTY_ELEMENTDATA;
}
}
Run Code Online (Sandbox Code Playgroud)
c.getClass()区分是或不是的原因是什么ArrayList.class?这个案子有必要分拆吗?
(我只是想理解 OpenJDK 类 ArrayList 发行版中的 Java 代码。)